opencv - GLSL和OpenCV

这个问题有点复杂,但是我想将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/

相关文章:

python - SimpleCV NameError:名称 'images'未定义

json - 在 Docker 中将 JSON 文件作为环境变量传递

python - 用Python捕捉 Action

visual-c++ - MS Visual Studio 10上的OpenCV:cv::cvtCo

opencv - 斯诺克球碰撞检测

opencv - 延迟使用OpenCv播放AVI

opencv - OpenCV中两个矩阵的广义特征值

opencv - OpenCV中matchTemplate函数出现错误

opencv - 将CvMat 8转换为CvMat

image-processing - 在 OpenCV 中应用形态学时,SetROI 是否有效?