ubuntu 下opencv2.4.0 打开摄像头
最近在做使用opencv 打开摄像头获取视频的东西,用以下的例子尝试打开摄像头发现失败,我用的是外接的 USB 摄像头,刚开始以为是函数参数的问题,试了好多也没有成功。
下面是例子程序。
- #include <QApplication>
- #include <opencv/highgui.h>
- #include <opencv/cv.h>
- #include <opencv/cxcore.h>
- #include <QtGui>
- int main(int argc,char ** argv)
- {
- //声明IplImage指针
- IplImage *pFrame = NULL;
- //获取摄像头
- CvCapture *pCapture = cvCreateCameraCapture(-1);
- //创建窗口
- cvNamedWindow("video",1);
- //显示视频
- while(1)
- {
- pFrame = cvQueryFrame(pCapture);
- if(!pFrame)
- break;
- cvShowImage("video",pFrame);
- char c = cvWaitKey(33);
- if(c == 27)
- break;
- }
- //最后释放capture 和window
- cvReleaseCapture(&pCapture);
- cvDestroyWindow("video");
- return 0;
- }
几个函数简单介绍一下:
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到合适的帧。
- while(1)
- {
- pFrame = cvQueryFrame(pCapture);
- if(!pFrame) //如果抓取帧为空 ,break 打破循环
- break;
- cvShowImage("video",pFrame); //否则将抓取的那一帧显示在创建的窗口上
- char c = cvWaitKey(33); //等待33ms,如果触发了按键,将按键的ASCII值给c
- if(c == 27) //如果c为ESC(ASCII 为27)循环退出
- break;
- }
如上所说,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 。
然后重新编译例子程序,摄像头就能打开了。