图像处理--多个平台下双目视觉的实现
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时调用摄像头只要逆序打开多摄像头就可以了,比如先打开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、编译程序,成功!