您的位置:首页 > 运维架构

opencv1.0用笔记本打开摄像头画面为黑色

2013-05-29 18:24 435 查看
其他解释: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.csdn.net/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就可以采集摄像头图像了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: