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 展开
用的是别人的代码,在别人电脑上就可以读视频。
#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 展开
1个回答
展开全部
非常简单,你用的是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();
}
#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();
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询