大致把自己在这一部分的思路和遇到的问题记录一下
所说的视频帧就是按序列排放的一组图像,这些图像通过一定的间隔进行排序,也就是帧率,把它们组合起来就是动态的视频了。
接下来就开始介绍opencv中读取USB摄像头和本地视频文件
想要打开USB摄像头,就要指定ID号,也就是0.以上两种读取大致的流程是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
|
打开摄像机有两种方式,一种在定义类时,一种是open()方法
VideoCapture *cap("h.avi");orcap.open("h.avi");
//方法1
cap.read(frame);
//方法2
cap.grab();
cap.retrieve(frame);
//方法3
cap>>frame;
视频里有比图像更多的信息,可以获取视频的帧率、帧数、尺寸、格式等。这些信息都可以使用get方法获取到。
double rate=cap.get(CV_CAP_PROP_FPS);long nFrame=static_cast<long>(cap.get(CV_CAP_PROP_FRAME_COUNT));
相对应的还有set方法,其可以设置视频的帧率、亮度,还可以设置特定的位置和帧数读取视频。
在进行USB摄像头读取中遇到的问题:
或
解决办法是调用imshow、cvtColor时要加一条判断不为空的语句。
对于opencv之前的版本,有的使用的是cvCaptureFromCAM(0),我一直没有成功使用过这个。
都是在程序中把上面那个失败的函数改为cvCreateCameraCapture(0),之后的处理流程就跟上面贴出的代码处理流程类似了,只是函数的使用书写方式不同。
希望能给大家一点小小的帮助。