代码改变世界

图像处理--多个平台下双目视觉的实现

2011-11-05 17:46  libing64  阅读(2600)  评论(0编辑  收藏  举报

VC6.0下的实现双目视觉见另一篇博客:http://blog.csdn.net/renshengrumenglibing/article/details/6884124

这里主要讲解在opencv2.3+VS10下的实现,opencv2.1+VS10跟这个类似,但是需要逆序打开摄像头。

先看效果:打开三个摄像头:两个USB摄像头一个联想自带的摄像头


双目视觉实现总结:

一、VC6.0+opencv1.0

实现双目视觉时,采用的是使用了directshow的一个类CameraDS

http://blog.csdn.net/renshengrumenglibing/article/details/6884124

二、opencv2.1+VS10
在opencv2.1+VS10时调用摄像头只要逆序打开多摄像头就可以了,比如先打开ID = 2的再打开ID = 1的,否则第二的摄像头无法打开。
三、opencv2.3+VS10
在opencv2.3+VS10下试了一下,可以直接打开多个摄像头,无需逆序,也无需使用directshow的类。


源码如下:打开三个摄像头opencv2.3+VS10
#include "highgui.h"
#include "cv.h"
int main(){

CvCapture* pCapture0 = cvCreateCameraCapture(0);
CvCapture* pCapture1 = cvCreateCameraCapture(1);
CvCapture* pCapture2 = cvCreateCameraCapture(2);
IplImage* pFrame0 = NULL;
IplImage * pFrame1 = NULL;
IplImage * pFrame2 = NULL;
//创建窗口
cvNamedWindow("video0", 1);
cvNamedWindow("video1",1);
cvNamedWindow("video2",1);


//显示视屏
while(1)
{
pFrame0=cvQueryFrame( pCapture0 );
pFrame1 = cvQueryFrame(pCapture1);
pFrame2 = cvQueryFrame(pCapture2);
if(!pFrame0)break;
if(!pFrame1)break;
if(!pFrame2)break;
cvShowImage("video0",pFrame0);
cvShowImage("video1",pFrame1);
cvShowImage("video2",pFrame2);
char c=cvWaitKey(33);
if(c==27)break;
}
cvReleaseCapture(&pCapture0);
cvReleaseCapture(&pCapture1);
cvReleaseCapture(&pCapture2);
cvDestroyAllWindows();
return 0 ;
}


opencv2.3+VS10的配置:
操作系统:Windows 7 x86 中文旗舰版


编译环境:Visual Studio 2010 中文旗舰版


OpenCV版本:OpenCV-2.3.0-win




1、下载OpenCV(必须要superpack.exe)


http://www.opencv.org.cn/download/OpenCV-2.3.0-win-superpack.exe




2、安装


解压到D盘根目录下。




3、设置系统环境变量


系统环境变量Path中加入


D:\OpenCV2.3\build\x86\vc10\bin




4、建立一个demo


在C++下,新建一个“win32控制台程序”,“空项目”即可,输入以下代码:


#include "StdAfx.h"


#include "highgui.h"


int main()


{


const char* imagename ="D:/Demo.jpg"; //随便放一张jpg图片在D盘或另行设置目录


cv::Mat img = cv::imread(imagename);


if(img.empty()) return -1; //是否加载成功


if(!img.data) return -1;


cv::namedWindow("image",CV_WINDOW_AUTOSIZE);


cv::imshow("image", img);


cv::waitKey();


return 0;


}




5、配置
(1)、在“视图”中打开“属性管理器”;


(2)、在“属性管理器”中双击Demo的项目名称;


(3)、在“Demo属性页”->“VC++目录”->“包含目录”中添加以下目录:


D:\OpenCV2.3\build\include;D:\OpenCV2.3\build\include\opencv;D:\OpenCV2.3\build\include\opencv2


(4)、在“Demo属性页”->“VC++目录”->“库目录”中添加以下目录:


D:\OpenCV2.3\build\x86\vc10\lib


(5)、在“Demo属性页”(“配置”==“Debug”)->“配置属性”->“链接器”->“输入”->“附加依赖库”中添加以下lib文件:


opencv_core230d.lib
opencv_highgui230d.lib
opencv_video230d.lib
opencv_ml230d.lib
opencv_legacy230d.lib
opencv_imgproc230d.lib


(6)、在“Demo属性页”(“配置”==“Release”)->“配置属性”->“链接器”->“输入”->“附加依赖库”中添加以下lib文件:


opencv_core230.lib
opencv_highgui230.lib
opencv_video230.lib
opencv_ml230.lib
opencv_legacy230.lib
opencv_imgproc230.lib


注意:此时极有可能只是添加进去一个库,最好是打开编辑那一栏后再输入~~

6、编译程序,成功!