其他解释:http://www.opencv.org.cn/forum/viewtopic.php?t=15783(OpenCV1.0操作摄像头,必须确保摄像头的驱动是vfw的才能使用,如果你的驱动是directshow的是驱动不起来的。)
最近在学习opencv,一开始时,使用的开发环境是win7(32位)+dell+opencv1.0+vc6.0,一开始在做摄像头视频采集的时候,出现问题,如下
代码界面:
编译后,没问题,运行出现如下界面:
选择“确定”出现如下界面:
一开始我以为可能摄像头读取失败,于是我就进行了调试,好像读取时没问题的。
那到底是什么原因呢,我就去上网搜,发现很多人都遇到相似的问题,一说是opencv1.0版本摄像头驱动不兼容win7(http://blog.youkuaiyun.com/akipeng/article/details/6599313),一说是,win7没有vfw模式(http://zhidao.baidu.com/question/349858650.html),他们都建议使用directshow模块来实现。
下面代码好像就可以了:
#include "cxcore.h"
#include "cvcam.h"
#include "windows.h"
#include "cv.h"
#include "highgui.h"
void callback(IplImage* image);
int main()
{
int ncams = cvcamGetCamerasCount( );//返回可以访问的摄像头数目
int width=320;
int height=240;
HWND MyWin;
// 设置系统属性
cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); //Enable视讯
//0:欲设置属性的摄像头序号; 第二个参数是属性名字;
//第三个参数是指向设置值的指针
cvcamSetProperty(0, CVCAM_PROP_RENDER, CVCAMTRUE); //启用视讯
// MyWin 是窗口 HWND 的类型
MyWin = (HWND) cvGetWindowHandle("cvcam window");
cvcamSetProperty(0, CVCAM_PROP_WINDOW, &MyWin); // Selects a window
cvcamSetProperty(0,CVCAM_RNDWIDTH,&width);
cvcamSetProperty(0,CVCAM_RNDHEIGHT,&height);
//video rendering
//回调函数将处理每一帧
cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback);
cvcamInit( );
cvcamStart( );
// 现在程序开始工作
cvWaitKey(0);
cvcamStop( );
cvcamExit( );
return 0;
}
// 回调函数
void callback(IplImage* image)
{
cvcamPause();
cvcamGetProperty(0,"raw_image",&image);
cvcamResume();
}
我试验了一下,的确可以.
其实我后来在虚拟机上装了xp之后,在其上运行opencv1.0就可以采集摄像头图像了。