我参考了这几位大牛的博客,受益匪浅:
http://blog.csdn.net/sunanger_wang/article/details/7744025
http://www.opencv.org.cn/forum.php?mod=viewthread&tid=12963
http://blog.csdn.net/scyscyao/article/details/5562024
http://blog.csdn.net/chenyusiyuan/article/details/5967291
最后那位有连续三篇的内容进行了详细的介绍,非常棒。
由于看到那些博客下面的一些问题都没人回答,那些算是细节,但大家知道有时候就是这么一点小时会卡很久。
再好的解释也没源代码和示例图来的快,小弟就把这几天摸索的内容放上来。
我的平台:2个罗技C170摄像头
嘿嘿。。比较简陋
matlab标定:
相信仔细看过原理以及上面的博客就能用matlab计算出双目的结果,这儿有一点要注意,就是要计算双目参数,左右两个摄像头必须同时拍摄棋盘格,一共20张!我一开始是单独拍摄,后来发现单目的数据可以标定出来,双目的就会报错,,想想原理也是,双目标定必须是同时拍摄的才行呀。这儿贴一段自己写的同时采集图像的代码,按下c,就能保存图像。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
int pic_num = 13;
char* name_l = (char*)malloc(sizeof(char)*200);
char* name_r = (char*)malloc(sizeof(char)*200);
int main()
{
cout << "测试两个摄像头同时读取数据" << endl;
CvCapture* cap_left;
CvCapture* cap_right;
IplImage *img0 , *img1;
IplImage *img_left, *img_right;
IplImage *img_left_Change, *img_right_Change;
cvNamedWindow("camera_left");
cvNamedWindow("camera_right");
cap_left = cvCreateCameraCapture(1);
assert(cap_left != NULL);
cap_right = cvCreateCameraCapture(0);
assert(cap_right != NULL);
while(1)
{
cvGrabFrame(cap_left);
cvGrabFrame(cap_right);
img0 = cvRetrieveFrame(cap_left);//img0 1 只是指针,这个可以在单独的采图线程里刷新
img1 = cvRetrieveFrame(cap_right);
if( !img0 || !img1)
{
cout << "camera0 error" << endl;
break;
}
img_le