用两个摄像头实现,双目标定,双目测距,双目测深度,双目求深度程序v2(基于opencv2.4.9,不需要扩展库)
实现效果
http://v.youku.com/v_show/id_XMTU2Mzk0NjU3Ng==.html
这个代码是视频中代码的修改版
修改内容:屏蔽了用cvblobslib实现的功能,但是主要功能标定以及测距都可以实现,而且不用安装那反人类的cvblobslib扩展库。
实现环境:
1.windows10
2.opencv 2.4.9
3.visual studio 2013
4.两颗微软HD-3000摄像头
5.i7、集显、16g、sata
ps:如果你下载了我之前的代码:http://download.csdn.net/detail/hysteric314/9514872,
那这个你就不需要下载了,只需要改一下之前的代码
方法:
注释掉stdafx.h头文件里的
//#define CV_EVENT_LBUTTONDOWN 1
//#define CV_EVENT_RBUTTONDOWN 2
注释掉这两行,或删掉
再把stereomain.cpp里的CV_EVENT_MLBUTTONDOWN改成CV_EVENT_LBUTTONDOWN
代码有关的博客地址:http://blog.csdn.net/hysteric314/article/details/51357318
双目标定、双目测距、双目深度实现代码(opencv2.4.9,需要cvblobslib扩展库)
实现效果:http://v.youku.com/v_show/id_XMTU2Mzk0NjU3Ng==.html
如何在你的电脑上运行这个程序?
1,它需要cvblobslib这一个opencv的扩展库来实现检测物体与给物体画框的功能,具体安装信息请见: http://dsynflo.blogspot.com/2010/02/cvblobskib-with-opencv-installation.html,当你配置好cvblobslib之后,你可以用这一的程序进行测试:http://dl.dropbox.com/u/110310945/Blobs%20test.rar
2,视频中两个摄像头之间的距离是6cm,你可以根据你摄像头的型号,来选择合适的距离来达到最好的效果。
3,在进行测距之前,首先需要对摄像头进行标定,那么如何标定呢?
在stdafx.h中把"#define CALIBRATION 0"改成 “#define CALIBRATION 1”表示进行标定,标定之后,你就可以在工程目录下的"CalibFile" 文件夹中得到标定信息的文件。如果标定效果还不错,你就可以吧"#define CALIBRATION " 改成0,以后就不需要再标定,直接使用上一次的标定信息。你还需要把"#define ANALYSIS_MODE 1"这行代码放到stdafx.h中。
4,视频中使用的是10*7的棋牌格,共摄录40帧来计算摄像头的各种参数,如果你像使用其他棋盘格,可以在 "StereoFunctions.cpp"文件中修改相应参数。
5,如果你无法打开摄像头,可以在 "StereoGrabber.cpp"文件中修改代码“cvCaptureFromCAM(index)”中index的值。
6,About computing distance: it interpolates the relationship between depth-value and real-distance to third degree polynomial. So i used excel file "interpolation" for interpolation to find k1 to k4, you should find your own value of these parameters.
7,你可以通过调整控制窗口中各个参数的滑块,从而来得到更好的视差图。
8,在目录下的”distance“文件夹中,有计算距离信息的matlab代码。
9,如果你想了解基本的理论,可以看一下这个文档和代码(视频里的代码其实就是根据这个代码改的):http://scholar.lib.vt.edu/theses/available/etd-12232009-222118/unrestricted/Short_NJ_T_2009.pdf
视频中环境:vs2008,opencv2.1
用两个摄像头实现双目标定,双目测距级求深度(基于opencv2.4.9,不需要扩展库)
实现效果:http://v.youku.com/v_show/id_XMTU2Mzk0NjU3Ng==.html
但是
这个工程代码是视频中代码的修改版
修改内容:屏蔽了用cvblobslib实现的功能,但是主要功能标定以及测距都可以实现,而且不用安装那反人类的cvblobslib扩展库。
实现环境:
1,两个普通摄像头
2.opencv2.4.9
3.windows10
4.vs2013
使用opencv与两个摄像头实现双目标定与测距
实现效果:http://v.youku.com/v_show/id_XMTU2Mzk0NjU3Ng==.html
如何在你的电脑上运行这个程序?
1,它需要cvblobslib这一个opencv的扩展库来实现检测物体与给物体画框的功能,具体安装信息请见: http://dsynflo.blogspot.com/2010/02/cvblobskib-with-opencv-installation.html,当你配置好cvblobslib之后,你可以用这一的程序进行测试:http://dl.dropbox.com/u/110310945/Blobs%20test.rar
2,视频中两个摄像头之间的距离是6cm,你可以根据你摄像头的型号,来选择合适的距离来达到最好的效果。
3,在进行测距之前,首先需要对摄像头进行标定,那么如何标定呢?
在stdafx.h中把"#define CALIBRATION 0"改成 “#define CALIBRATION 1”表示进行标定,标定之后,你就可以在工程目录下的"CalibFile" 文件夹中得到标定信息的文件。如果标定效果还不错,你就可以吧"#define CALIBRATION " 改成0,以后就不需要再标定,直接使用上一次的标定信息。你还需要把"#define ANALYSIS_MODE 1"这行代码放到stdafx.h中。
4,视频中使用的是10*7的棋牌格,共摄录40帧来计算摄像头的各种参数,如果你像使用其他棋盘格,可以在 "StereoFunctions.cpp"文件中修改相应参数。
5,如果你无法打开摄像头,可以在 "StereoGrabber.cpp"文件中修改代码“cvCaptureFromCAM(index)”中index的值。
6,About computing distance: it interpolates the relationship between depth-value and real-distance to third degree polynomial. So i used excel file "interpolation" for interpolation to find k1 to k4, you should find your own value of these parameters.
7,你可以通过调整控制窗口中各个参数的滑块,从而来得到更好的视差图。
8,在目录下的”distance“文件夹中,有计算距离信息的matlab代码。
9,如果你想了解基本的理论,可以看一下这个文档:http://scholar.lib.vt.edu/theses/available/etd-12232009-222118/unrestricted/Short_NJ_T_2009.pdf
视频中环境:vs2008,opencv2.1
基于opencv的双目测距(代码+文章)
文章名称:3-D Point Cloud Generation from Rigid and Flexible Stereo Vision Systems
文章(英文)详细讲解了双目视觉的一些基本原理,已经如何使用两个普通的网络摄像头来实现双目视觉,以及如何根据两个摄像头来计算物体深度信息。
代码为文章中附带的代码
仅供参考学习