关于opengl保存图像到内存后,opencv从内存中读取图像的问题
奋进的蛋蛋 2017-03-22 06:33:12 目前想实现opengl截取窗口图像到内存,然后用cv处理,所以需要用cv从内存把图像再取出来。可是一直是灰色的,代码稍作改动后会变成黑色加乱码
直接附上部分转换代码:
GLint iViewport[4] = { 0 };
glGetIntegerv(GL_VIEWPORT_BIT, iViewport);// 获取视图大小
GLubyte* buffer = (GLubyte*)malloc(iViewport[2] * iViewport[3] * sizeof(GLubyte)* 3); //开辟内存
//读gl的屏幕像素点到内存
glReadPixels(iViewport[0], iViewport[1], iViewport[2], iViewport[3], GL_RGB, GL_UNSIGNED_BYTE, buffer);
//将图像保存到IplImage中;
IplImage* model2DImg = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1);
//复制地址,所以最后不能free(buffer);
model2DImg->imageData = (char*)buffer;
cvNamedWindow("result", 1);
cvShowImage("result", model2DImg);
//cvWaitKey(); //等待响应时间10ms;
cvReleaseImage(&model2DImg);
free(buffer);
glutMainLoop();//循环
return(0);
运行结果是一个是本程序显示的模型窗口,另一个是由cvshowimage从内存中显示出来的图像,但是后者一直是灰色的,不知道是glreadpixels读的格式问题还是IpIImage这里开始的问题,总之就是想找到opengl到opencv的接口,实现GL窗口图像到CV窗口的传输,然后用CV进行图像处理;最后的free和释放问题我也试过了,有没有都好像无所谓,就是传不过来图像一片灰。
到底是glread没存到内存中还是cv没读出来呢?希望大大们告知一下,或者有没有更好的方法?