opencv无法读取摄像头

ubuntu 下opencv2.4.0 打开摄像头

分类: OpenCV 484人阅读 评论(1) 收藏 举报

最近在做使用opencv 打开摄像头获取视频的东西,用以下的例子尝试打开摄像头发现失败,我用的是外接的 USB 摄像头,刚开始以为是函数参数的问题,试了好多也没有成功。

下面是例子程序。

  1. #include <QApplication>  
  2. #include <opencv/highgui.h>  
  3. #include <opencv/cv.h>  
  4. #include <opencv/cxcore.h>  
  5. #include <QtGui>  
  6.   
  7. int main(int argc,char ** argv)  
  8. {  
  9.     //声明IplImage指针  
  10.     IplImage *pFrame = NULL;  
  11.   
  12.     //获取摄像头  
  13.     CvCapture *pCapture = cvCreateCameraCapture(-1);  
  14.   
  15.     //创建窗口  
  16.     cvNamedWindow("video",1);  
  17.   
  18.     //显示视频  
  19.     while(1)  
  20.     {  
  21.         pFrame = cvQueryFrame(pCapture);  
  22.   
  23.         if(!pFrame)  
  24.             break;  
  25.         cvShowImage("video",pFrame);  
  26.   
  27.         char c = cvWaitKey(33);  
  28.   
  29.         if(c == 27)  
  30.             break;  
  31.   
  32.     }  
  33.   
  34.     //最后释放capture 和window  
  35.     cvReleaseCapture(&pCapture);  
  36.   
  37.     cvDestroyWindow("video");  
  38.   
  39.     return 0;  
  40. }  

几个函数简单介绍一下:

1、cvCreateCameraCapture

初始化从摄像头中获取视频

CvCapture* cvCreateCameraCapture( int index );

index

        要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。

        使用参数-1,发现打不开摄像头,我以为是参数的问题,网上找了一下,说是只接受 -1 和 0两个参数,我也试了,没用。

  2、CvCapture

视频获取结构

typedef struct CvCapture CvCapture;

结构CvCapture 没有公共接口,它只能被用来作为视频获取函数的一个参数。

然后就是循环读入视频文件

 3、cvQueryFrame函数

从摄像头或者文件中抓取并返回一帧

IplImage* cvQueryFrame( CvCapture* capture );

capture

    视频获取结构。

视频获取结构

        函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。 抓取后,capture被指向下一帧,可用cvSetCaptureProperty调整capture到合适的帧。 

  1. while(1)  
  2.     {  
  3.         pFrame = cvQueryFrame(pCapture);  
  4.   
  5.         if(!pFrame)           //如果抓取帧为空  ,break 打破循环  
  6.             break;  
  7.         cvShowImage("video",pFrame);  //否则将抓取的那一帧显示在创建的窗口上  
  8.   
  9.         char c = cvWaitKey(33); //等待33ms,如果触发了按键,将按键的ASCII值给c  
  10.   
  11.         if(c == 27)     //如果c为ESC(ASCII 为27)循环退出  
  12.             break;  
  13.   
  14.     }  

        如上所说,cvCreateCameraCapture( int index ) 函数的参数试了很多,发现还是不能打开摄像头,后来网上找了一下,发现有些包还需要安装一下,以下是配置摄像头需要的所有包。

sudo apt-get install ffmpeg libavcodec-dev libavcodec52 libavformat52 libavformat-dev

sudo apt-get install libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev

sudo apt-get install libxine1-ffmpeg libxine-dev libxine1-bin

sudo apt-get install libunicap2 libunicap2-dev

sudo apt-get install libdc1394-22-dev libdc1394-22 libdc1394-utils

sudo apt-get install swig

sudo apt-get install libv4l-0 libv4l-dev

sudo apt-get install python-numpy

sudo apt-get install libpython2.6 python-dev python2.6-dev 

        以上包全部安装之后,需要重新编译OpenCV,依次 cmake CMakeLists.txt,make,sudo make install 。

然后重新编译例子程序,摄像头就能打开了。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值