0
我想从使用C++的Android上的OpenCV和GLES20进行一些基本操作开始。使用OpenCV处理来自glReadPixels的图像并将其作为纹理返回
我使用CameraGLSurfaceView及其调用onCameraTexture(...)调用我传入我的本机库。
调用流畅,我可以读取帧缓冲区矢量,并将其传递到纹理而不会改变,并按预期工作。
但是,当我尝试使用像素,我得到的图像损坏。
我的C++代码:
cv::Mat in(w,h,CV_8UC4);
cv::Mat out(w,h,CV_8UC4);
glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, in.data);
// following operations break image >>
cv::cvtColor(in, out, CV_RGBA2BGRA);
cv::flip(out, in, 0);
cv::cvtColor(in, out, CV_BGRA2RGBA);
// << prev operations break image
glBindTexture(GL_TEXTURE_2D, (GLuint) tex2);
glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGBA,
w,
h,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
out.ptr());
glBindTexture(GL_TEXTURE_2D, 0);
in.release();
out.release();
没有签署操作画面去质地和显示良好。
我知道我的错误是在OpenGL和OpenCV之间转换格式。
如何正确转换格式?