cvGetCaptureProperty函数
来源:互联网 发布:c语言b 是什么意思 编辑:程序博客网 时间:2024/06/06 09:33
OpenCV中提供了一个函数cvGetCaptureProperty(Capture* cap,int property_index)函数来获取视频文件的一些属性
- CV_CAP_PROP_POS_MSEC - 影片目前位置,为毫秒数或者视频获取时间戳
- CV_CAP_PROP_POS_FRAMES - 将被下一步解压/获取的帧索引,以0为起点
- CV_CAP_PROP_POS_AVI_RATIO - 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
- CV_CAP_PROP_FRAME_WIDTH - 视频流中的帧宽度
- CV_CAP_PROP_FRAME_HEIGHT - 视频流中的帧高度
- CV_CAP_PROP_FPS - 帧率
- CV_CAP_PROP_FOURCC - 表示codec的四个字符
- CV_CAP_PROP_FRAME_COUNT - 视频文件中帧的总数
通过创建一个Capture对象的指针后,调用cvGetCaptureProperty即可获取上述任何相关属性;但是我们不能太依赖这个函数;比如我们想获取一段视频的帧数,我们就不能太依赖于CV_CAP_PROP_FRAME_COUNT这个属性;因为cvGetCaptureProperty对属性的访问,其实访问的是关联视频文件的文件头信息,并不是真正去访问了视频的图像数据,这就带来一个问题:我们在讲其他视频格式转换为AVI格式的时候,图像帧数并没改变,只是视频文件头改变了,这时直接通过get函数读取的信息就可能不准确;最好的办法是迭代从视频中取出一帧,检查是否有数据,来确定该视频文件的总共帧数~~~
不光是帧数,帧率也可能不对~~
比如,自己在实验中庸狸窝转换器将一段视频转换为avi格式的视频文件后,用下面的两段代码,结果差距很大:
code 1.
CvCapture *cap = cvCaptureFromFile(videoName);//获取视频
int numFrames = (int) cvGetCaptureProperty(cap,
CODE 2.
IplImage* pImg=NULL;
int count=0;
while((pImg=cvQueryFrame(cap))!=NULL)
{
}//得到的帧数只有60帧;
究其原因其实就是cvGetCaptureProperty实现的机制上,它只是读取视频文件头信息,而不是真正读取了视频文件;因此在进行不同格式的视频文件转换为OpenCV支持的AVI时,可能获取的属性并不准确~~~
因此在使用该函数时,要注意。自己的经验是对于原始的AVI文件,可以直接使用该函数(code1),而经过转换而得到的视频文件,最好使用code 2。
注:有时候这个函数在cvQueryFrame被调用一次后,再调用cvGetCaptureProperty才会返回正确的数值。这是一个bug,建议在调用此函数前先调用cvQueryFrame。
- cvGetCaptureProperty函数
- cvGetCaptureProperty
- OpenCV中关于cvGetCaptureProperty函数
- OpenCV中关于cvGetCaptureProperty函数
- OpenCV中关于cvGetCaptureProperty函数
- 【OpenCV学习笔记】【函数学习】三(cvGetCaptureProperty函数)
- cvGetCaptureProperty/cvSetCaptureProperty
- cvGetCaptureProperty 摄像头操作
- cvGetCaptureProperty 获取视频流的各种属性 用法
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- php上传文件简单实现
- 说好的期末考试编程题答案
- 【android学习笔记】关于相对布局RelativeLayout的各种属性介绍
- Sprite Kit编程指南(9)-Sprite Kit最佳实践
- 北京、上海家庭年收入情况统计 (zz)
- cvGetCaptureProperty函数
- 4950. 编一个基于对象的程序,求长方柱的体积 考察类
- Objective-c 中 nil, Nil, NULL和NSNull的区别
- 我的c++笔记[3]
- 电解离子水用于植物
- view to image
- 各编译器对C++11的支持比较
- Oracle合并查询
- .Net可空值类型