这个问题有点复杂,但是我想将GLSL用于预处理,然后将OpenCV用于后处理。基本上,我将纹理用作GLSL着色器的输入,而无论片段着色器的输出是什么,我都必须将其用作OpenCV的输入。gl_FragColor
之后,我使用glReadPixels
读取FBO,然后在OpenCV中将该数据设置为IplImage
。
GLubyte *pixels = new GLubyte[640*480*4];
glReadPixels(0, 0, 640,480, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
IplImage *img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,4);
cvSetData(img,pixels,640*4);
gl_FragColor
)的输出设置为IplImage
吗?我使用的是OpenGL ES 2.0,因此存在一些限制。
最佳答案
我以前没有使用过GLSL,因此可能有一个您不能执行此操作的原因。但是,您是否考虑过删除这样的内存副本之一:
Mat_<Vec4b> glslImage(640, 480);
glReadPixels(0, 0, 640, 480, GL_RGBA, GL_UNSIGNED_BYTE, (GLubyte*)glslImage.data);
pixels
缓冲区?
https://stackoverflow.com/questions/8324989/