配置opencv:
1.下载opencv,安装,安装的时候还要注意选择增加环境变量。
2.检查C:/Program Files/OpenCV/bin是否已经被加入到环境变量PATH,如果没有,需要手动加入。
3.配置vc :检查C:/Program Files/OpenCV/bin是否已经被加入到环境变量PATH,如果没有,请加入:
“C:/Program Files/OpenCV/lib”
4.然后选择include files,在下方填入路径:
C:/Program Files/OpenCV/cxcore/include
C:/Program Files/OpenCV/cv/include
C:/Program Files/OpenCV/cvaux/include
C:/Program Files/OpenCV/ml/include
C:/Program Files/OpenCV/otherlibs/highgui
C:/Program Files/OpenCV/otherlibs/cvcam/include
5.项目设置:
每创建一个将要使用OpenCV的VC Project,都需要给它指定需要的lib。菜单:Project->Settings,然后将Setting for选为All Configurations,然后选择右边的link标签,在Object/library modules附加上:cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib
配置dshow:
1.从 msdn.microsoft.com/directx/ 下载 DirectX,(文件很大,但是可以只下载部分)。
2.带例子安装。
3.打开项目:<DirectXSDKInstallFolder>/samples/C++/DirectShow/BaseClasses/baseclasses.{dsw|sln}. (如果没有这个文件,要么是你没有下载样例,要么是路径不对。如果是后者,寻找 streams.h 并在同一个文件夹下打开一个 workspace 文件。)
4.编译建立库的 Release 和 Debug 版本。
5.将产生的库 (在 DirectX 9.x 中,分别叫 strmbase.lib 和 strmbasd.lib) 拷贝到目录 <DirectXSDKInstallFolder>/lib 下。
配置工程:
1. 在 Developer Studio 添加路径: 添加 <DirectXSDKInstallFolder>/include <DirectXSDKInstallFolder>/samples/C++/DirectShow/BaseClasses 到 includes' 搜索路径中 (在 Developer Studio 6.0 情况下是 Tools->Options->Directories->Include files)
2. 添加 <DirectXSDKInstallFolder>/lib 到库搜索路径中 (在 Developer Studio 6.0 情况下是 Tools->Options->Directories->Library files) 注意:将上面增加的东东添加到最顶端,否则还会出现编译或链接错误。因为 Developer Studio 6.0 包含了一些老版本的 DirectX 头文件和库文件,它们与新版本有冲突。
3. 下载ARFrameGrabber 类,从http://www.opencv.org.cn/images/b/b5/Directshow_Opencv.zip。
4. 解压缩后把 ARFrameGrabber.h 和 ARFrameGrabber.cpp 拷贝到到工程中,然后再从vc打开工程,把这两个文件添加进来。
基本上都弄好了,所以,现在可以新建一个按钮响应函数,把以下代码拷贝过去,编译,看看是否成功。如果成功了,就配置好了。
static ARFrameGrabber frameGrabber; //声明对象IplImage ds_frame;frameGrabber.Init(0, true); //设置支持directshow的设备编号,从0开始frameGrabber.SetFlippedImage(true); //图像是否翻转for(;;) { IplImage *frame =0; frameGrabber.GrabByteFrame(); //获取一帧 BYTE *myBuffer = frameGrabber.GetByteBuffer(); //得到图像的缓冲 int width = frameGrabber.GetWidth(); int height = frameGrabber.GetHeight(); int stride = (width * sizeof( RGBTRIPLE ) + 3) & -4; cvInitImageHeader( &ds_frame, cvSize(width, height), 8, 3,IPL_ORIGIN_BL, 4 ); //创建iplimage ds_frame.widthStep = stride; cvSetData( &ds_frame, myBuffer, stride ); //copy数据 frame = &ds_frame; /* 视频分析部分 */ }
上面是转的,经检验,可有效支持多摄像头,不过为什么我的release才好使,debug不好使呢?