OpenGL用glReadPixels得到的图像一直是全黑,求大神帮助!

shotawaka 2017-04-24 04:31:22
作业里需要实现的一个步骤是把一个三维模型渲染到照片上,然后用了OpenGL来渲染模型,想用glReadPixel得到窗口的图像然后传给OpenCV,但是一直都只能得到全黑的图像,用glGetError查错结果是没有错误……不知道该怎么办,求助各位大神了!

渲染模型的代码:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
ReadObj(cd, "GlassesTest.obj", objmap, objname, matname);
//glutFullScreen();
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
setLight();

double r = 180 / PI;
glPushMatrix();
glRotatef(-0.05, 1.0, 0.0, 0.0);
glRotatef(r*(-2.18), 0.0, 1.0, 0.0);
glRotatef(0.03, 0.0, 0.0, 1.0);
glScalef(0.1f, 0.1f, 0.1f);
(中间画图略)
glPopMatrix();
glutSwapBuffers();

把图像传递到OpenCV的代码:
// Initialise a Mat to contain the image
cv::Mat glasses = cv::Mat::zeros(height, width, CV_8UC3); cv::Mat tempImage;

// Read Image from buffer
glReadBuffer(GL_FRONT);
glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, glasses.data);

cout << gluErrorString(glGetError()) << endl;

// Process buffer so it matches correct format and orientation
cv::cvtColor(glasses, tempImage, CV_BGR2RGB);
cv::flip(tempImage, glasses, 0);

PS. 小妹刚刚学编程还有图像处理这些东西没多久,所以希望大神们能用比较容易懂的说法解释一下Orz谢谢各位大神了
...全文
1294 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-04-26
  • 打赏
  • 举报
回复
引用 2 楼 shotawaka 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] http://bbs.csdn.net/topics/392140403
这个帖我看过,也试了,但是用帖子里的方法就程序崩溃了[/quote] 崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
赵4老师 2017-04-25
  • 打赏
  • 举报
回复
shotawaka 2017-04-25
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
http://bbs.csdn.net/topics/392140403
这个帖我看过,也试了,但是用帖子里的方法就程序崩溃了

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧