OpenCV学习笔记(15)使用OpenGL显示双目视觉三维重构效果.pdf

上传人:飞****9 文档编号:127863040 上传时间:2020-04-06 格式:PDF 页数:15 大小:1.50MB
返回 下载 相关 举报
OpenCV学习笔记(15)使用OpenGL显示双目视觉三维重构效果.pdf_第1页
第1页 / 共15页
OpenCV学习笔记(15)使用OpenGL显示双目视觉三维重构效果.pdf_第2页
第2页 / 共15页
OpenCV学习笔记(15)使用OpenGL显示双目视觉三维重构效果.pdf_第3页
第3页 / 共15页
OpenCV学习笔记(15)使用OpenGL显示双目视觉三维重构效果.pdf_第4页
第4页 / 共15页
OpenCV学习笔记(15)使用OpenGL显示双目视觉三维重构效果.pdf_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《OpenCV学习笔记(15)使用OpenGL显示双目视觉三维重构效果.pdf》由会员分享,可在线阅读,更多相关《OpenCV学习笔记(15)使用OpenGL显示双目视觉三维重构效果.pdf(15页珍藏版)》请在金锄头文库上搜索。

1、OpenCVOpenCV 学习笔记 学习笔记 1515 使用 使用 OpenGLOpenGL 显示双目视觉三维重构效果显示双目视觉三维重构效果 上一篇笔记中使用 Matlab 初步显示了双目视觉重构出的环境三维效果图 不过并没有加上纹理信息 在 OpenCV 中文论坛里 大象的帖子 using namespace cv Detect Memory Leaks or comment ifdef DEBUG CMemLeakDetect memLeakDetect endif enum STEREO BM 0 STEREO SGBM 1 int alg STEREO BM int stereo r

2、ectify 1 adaptThresh 1 int SADWindowSize 15 numberOfDisparities 64 SADWS alpha 8 MaxDisp beta 4 uniqRatio 25 thresRatio 60 int saveFrames 1 bool fullDP false double m ObjectWidth 10 0 0 目标宽度 double m ObjectHeight 10 0 0 目标高度 double m ObjectDisparity 10 0 0 视差 double m ObjectDistance 10 0 0 距离 char i

3、mg1name 100 img2name 100 dispImgName 100 dispDataName 100 OpenGL float imgdata 500 500 3 存放三维坐标数据 float texture 500 500 3 存放纹理数据 int width 0 height 0 rx 0 ry 0 int eyex 115 eyez 115 atx 100 atz 50 float scalar 1 scalar of converting pixel color to float coordinates 二 OpenGL 响应函数 在大象帖子的跟帖中 villager5v

4、illager5 综合了一小段代码 随着鼠标移动 可以从多个视角观看生成的三 维点云图 我在其基础上做了修改 为了与 OpenCV 循环同步 去掉了鼠标移动的响应函数 villager5villager5 的代码里用了定时器 改为使用 OpenCV 的 TrackBar 来调整 OpenGL 函数 glLookAt 的视角 另外 对于纹理映射 我暂时用一种简化的方式来实现 即直接把帧画面的纹理数据 RGB 值 赋值 到点云的颜色中 glColor3f 这样的做法缺点是显示的三维点云是分块 不连续的 前方的点云块 后面是黑色空洞 接下来会继续尝试按正常的纹理映射方法来实现 最终实现的效果应该是类

5、 似大 象帖子中提到的 Structure From Motion 软件所实现的效果 view plaincopy to clipboardprint OpenGL 响应函数 功能键 方向键 响应函数 void special int key int x int y switch key case GLUT KEY LEFT ry 5 glutPostRedisplay break case GLUT KEY RIGHT ry 5 glutPostRedisplay break case GLUT KEY UP rx 5 glutPostRedisplay break case GLUT KE

6、Y DOWN rx 5 glutPostRedisplay break 三维图像显示响应函数 void renderScene void glClear GL COLOR BUFFER BIT glLoadIdentity Reset the coordinate system before modifying gluLookAt eyex 100 0 0 eyez 100 0 atx 100 0 0 0 atz 100 0 0 0 1 0 0 0 根据滑动块位置变换 OpenGL 摄像机 视角 glRotatef ry 0 0 1 0 0 0 rotate about the z axis

7、根据键盘方向键按键消息变换摄像机视角 glRotatef rx 180 1 0 0 0 0 0 rotate about the y axis float x y z glPointSize 1 0 glBegin GL POINTS GL POINTS for int i 0 i height i for int j 0 j width j glColor3f texture i j 0 255 texture i j 1 255 texture i j 2 255 将图像纹理赋值到点云上 x imgdata i j 0 scalar 添加负号以获得正确的左右上下方位 y imgdata i

8、 j 1 scalar z imgdata i j 2 scalar glVertex3f x y z glEnd glFlush 窗口变化图像重构响应函数 void reshape int w int h glViewport 0 0 GLsizei w GLsizei h glMatrixMode GL PROJECTION glLoadIdentity gluPerspective 60 GLfloat w GLfloat h 1 0 500 0 显示 1 500 距离单位 这里是 cm 内的点云 glMatrixMode GL MODELVIEW 载入三维坐标数据 void load3

9、dDataToGL IplImage img3d CvScalar s accessing the image pixels for int i 0 i height i for int j 0 j width j s cvGet2D img3d i j s val 0 x s val 1 y s val 2 z imgdata i j 0 s val 0 imgdata i j 1 s val 1 imgdata i j 2 fabs s val 2 载入左视图纹理数据 void loadTextureToGL IplImage img int ind 0 CvScalar ss acces

10、sing the image pixels for int i 0 i height i for int j 0 jcols rows left rows 00716 int row0 min cvRound range begin rows nstripes rows 00717 int row1 min cvRound range end rows nstripes rows 00718 uchar ptr state slidingSumBuf data ptr range begin stripeBufSize 00719 int FILTERED state minDisparity

11、 1 16 00720 00721 Rect roi validDisparityRect 00722 if roi height 0 00723 return 00724 int row0 roi y 00725 int row1 roi y roi height 00741 Mat disp i disp rowRange row0 row1 00742 Mat cost i state disp12MaxDiff 0 Mat state cost rowRange row0 row1 Mat 00751 if state disp12MaxDiff 0 00752 validateDis

12、parity disp i cost i state minDisparity state numberOfDisparities state disp12MaxDiff 这个 validateDisparity 函数是在 OpenCV2 1 0 src cv cvstereosgbm cpp 中定义的 刚才说到的 出错 源自以下代码的参数检查 view plaincopy to clipboardprint 00969 CV Assert numberOfDisparities 0 增大增大 numberOfDisparity numberOfDisparity 时是正常的 满足时是正常的

13、满足 disp size codisp size cost size st size 但一旦减少 但一旦减少 numberOfDisparity numberOfDisparity 条件 条件 disp size cost size disp size cost size 就不能满足 从而提示出错 至于为什就不能满足 从而提示出错 至于为什 么不能满足该条件 我还没分析出来 调试经验不足 这个么不能满足该条件 我还没分析出来 调试经验不足 这个 AssertAssert 错误需要在程序运行遇到减少错误需要在程序运行遇到减少 numberOfDisparity numberOfDisparity

14、 的情况才会出错 不知道如何设置的情况才会出错 不知道如何设置 breakpoint breakpoint 使其只有使其只有 numberOfDisparity numberOfDisparity 减少时才生效 麻烦大家帮忙分析下啦减少时才生效 麻烦大家帮忙分析下啦 O O 在获取视差数据后 就可以利用 cv reprojectImageTo3D 来计算三维坐标数据 另外我还编写了一 个子程序 DoDetectNearObj 用于检测离摄像头最近的物体 view plaincopy to clipboardprint 双目匹配求解器状态初始化 bm state roi1 roi1 bm sta

15、te roi2 roi2 bm state preFilterCap 31 bm state minDisparity 0 bm state textureThreshold 10 bm state speckleWindowSize 100 bm state speckleRange 32 bm state disp12MaxDiff 1 sgbm preFilterCap 63 sgbm minDisparity 0 sgbm speckleWindowSize bm state speckleWindowSize sgbm speckleRange bm state speckleRan

16、ge sgbm disp12MaxDiff 1 for 求解器动态参数调整 bm state SADWindowSize SADWindowSize bm state numberOfDisparities numberOfDisparities bm state uniquenessRatio uniqRatio sgbm SADWindowSize SADWindowSize sgbm P1 8 cn sgbm SADWindowSize sgbm SADWindowSize sgbm P2 32 cn sgbm SADWindowSize sgbm SADWindowSize sgbm numberOfDisparities numberOfDisparities sgbm uniquenessRatio uniqRatio sgbm fullDP fullDP 检测离摄像头最近的物体 img1Ipl img1c img2Ipl img2c cvZero bi img if stereo rectify reprojectImageTo3D displf img3d Q true

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 高中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号