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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

参考技术A 非常简单,你用的是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();
本回答被提问者和网友采纳

利用opencv实现视频捕捉功能

 1 import cv2 as cv
 2 import numpy as np
 3 
 4 
 5 def video_demo():
 6     capture = cv.VideoCapture(0)   #打开摄像头,参数0代表设备ID(设备表示号),也就是电脑自带的摄像头,人如果要设置成其他摄像头,可以更改这个参数
 7     while(True):
 8         ret,frame = capture.read()  #读取摄像头,它能返回两个参数,第一个参数是bool 型的ret,其值为True或者False,代表有没有读到图片;第二个参数frame,表示读取当前一帧的图片
 9         frame = cv.flip(frame,1)     #翻转   等于0:上下颠倒     大于0:水平颠倒  小于0:180旋转
10         cv.imshow("video",frame)
11         c = cv.waitKey(10)
12         if c == 27:   
break # 这里代码的意思是按下esc键就会把这个捕捉到的视频图片关闭掉 或者也可以按下q 键来关闭视频图片,但是代码是这样写
cv.waitKey(10) & 0xff == ord(‘q‘)
15 video_demo()
16 cv.waitKey(0)
17 18 cv.destroyWindows()

    注意:上面那个捕捉到摄像头的视频,点击窗口关闭是关闭不了的,而且当你修改图片翻转方式的时候,你再执行代码的话会有代码报错,因为他是一个死循环,所以你必须按照上面说的那样,才能实现视频翻转调节功能,这里一定要注意,一开始,自己以为写的代码有bug,后来注意到了这里,不是代码的原因,这里涉及到个人隐私问题,就不拿视频照片举列子了,按照我上面说了,操作就完全没问题,哈哈哈。

以上是关于opencv 做视频捕捉的时候摄像头无法开启。显示出来的图像都是黑色的。的主要内容,如果未能解决你的问题,请参考以下文章

opencv能读取视频~但是无法读取摄像头,显示只有一片黑~

我是在ubuntu10.04下用opencv2.3做一个连续捕捉摄像头视频的图像并将它保存成图片的程序,可是总是没有保存

为啥用opencv捕获摄像头视频流时,突然显示框内就变灰了呢

利用opencv实现视频捕捉功能

使用 Opencv 加速从摄像头读取视频帧

opencv for android 如何实现后台启动摄像头,不显示预览界面