opencv 做视频捕捉的时候摄像头无法开启。显示出来的图像都是黑色的。

在第一次运行的时候,有提示选择哪个摄像头,我忘记我选的是什么了,我记得第二个是联想的摄像头。在之后的运行时就没有摄像头选择的提示。在哪里可以重新选择摄像头。用的是别人的代... 在第一次运行的时候,有提示选择哪个摄像头,我忘记我选的是什么了,我记得第二个是联想的摄像头。在之后的运行时就没有摄像头选择的提示。在哪里可以重新选择摄像头。
用的是别人的代码,在别人电脑上就可以读视频。
#include "cv.h"
#include "highgui.h"

int main( int argc, char** argv )
{
CvCapture* capture = 0;
IplImage* frame = 0;
IplImage *image=NULL;
IplImage *imag=NULL;
capture = cvCaptureFromCAM( 0 );
int fps=5;
CvVideoWriter* writer = 0;
int isColol=1;
int frameW=640;
int frameH=480;
writer=cvCreateVideoWriter("f:\\out1.avi",-1,fps,cvSize(frameW,frameH),isColol);
CvVideoWriter* writer1 = 0;
CvVideoWriter* writer2 = 0;
writer2=cvCreateVideoWriter("f:\\out2.avi",-1,fps,cvSize(frameW,frameH),isColol);
cvNamedWindow( "摄像头", 1 );
for(int i=0;i<50;i++)

{
frame = cvQueryFrame( capture );
char str[10];
itoa(i,str,10);

char str1[10]="f:\\";
strcat(str1,str);
strcat(str1,".jpg");

cvSaveImage(str1,frame);
imag = cvLoadImage( str1,-1) ;
cvWriteFrame(writer2,imag);
image = cvLoadImage( str1, 0) ;
cvWriteFrame(writer,image);
cvShowImage( "摄像头", frame );
cvWaitKey(40);
}
cvReleaseVideoWriter(&writer);
cvReleaseVideoWriter(&writer2);
cvReleaseImage(&frame);
cvReleaseImage(&image);
cvReleaseCapture(&capture );
cvDestroyWindow("摄像头");
return 0;
}
补充:用的win7 vc6 opencv1.0
展开
 我来答
wlzxlc
推荐于2017-11-24 · 超过37用户采纳过TA的回答
知道答主
回答量:114
采纳率:0%
帮助的人:74.6万
展开全部
非常简单,你用的是win7而不是xp,如果是在xp上上面的代码当然是可以的;貌似是因为你win7摄像头的缘故,还好像与vfw模式有关系吧,win7貌似没有vfw,楼主可以使用directshow模块来实现。试试下面的代码:
#include "cxcore.h"
#include "cvcam.h"
#include "windows.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();
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式