【OpenCV学习笔记】【函数学习】三(cvGetCaptureProperty函数)
来源:互联网 发布:java手机色游戏破解版 编辑:程序博客网 时间:2024/05/19 01:29
penCV中提供了一个函数cvGetCaptureProperty(Capture* cap,int property_index)函数来获取视频文件的一些属性,这是其中的OpenCV中属性的一些宏定义:
#define CV_CAP_PROP_POS_MSEC
#define CV_CAP_PROP_POS_FRAMES
#define CV_CAP_PROP_POS_AVI_RATIO
#define CV_CAP_PROP_FRAME_WIDTH
#define CV_CAP_PROP_FRAME_HEIGHT
#define CV_CAP_PROP_FPS
#define CV_CAP_PROP_FOURCC
#define CV_CAP_PROP_FRAME_COUNT
#define CV_CAP_PROP_FORMAT
#define CV_CAP_PROP_MODE
#define CV_CAP_PROP_BRIGHTNESS
#define CV_CAP_PROP_CONTRAST
#define CV_CAP_PROP_SATURATION
#define CV_CAP_PROP_HUE
#define CV_CAP_PROP_GAIN
#define CV_CAP_PROP_EXPOSURE
#define CV_CAP_PROP_CONVERT_RGB
#define CV_CAP_PROP_WHITE_BALANCE 17
#define CV_CAP_PROP_RECTIFICATION 18
通过创建一个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。。
转自http://blog.sina.com.cn/s/blog_4b0020f301012dbz.html
- 【OpenCV学习笔记】【函数学习】三(cvGetCaptureProperty函数)
- OpenCV中关于cvGetCaptureProperty函数
- OpenCV中关于cvGetCaptureProperty函数
- OpenCV中关于cvGetCaptureProperty函数
- cvGetCaptureProperty函数
- OpenCV学习笔记(三):drawKeypoints函数报错
- OpenCV 函数学习笔记
- 【OpenCV学习笔记】【函数学习】六(cvCreateImage()函数)
- 【OpenCV学习笔记】【函数学习】十七(imread()函数)
- openCV学习笔记(4)--cvSmooth函数
- OPENCV学习笔记(二) 聚合函数
- OpenCV学习笔记(9)addWeighted函数
- openCV学习笔记--cvSmooth函数
- Opencv学习笔记-常用函数
- OpenCv学习笔记(三):使用addweighted函数将两幅图像叠加
- 【OpenCV学习笔记】【函数学习】七(改变图像尺寸)
- 【OpenCV学习笔记】【函数学习】八(序列数据结构)
- 【OpenCV学习笔记】【函数学习】十五(批量读入图片)
- 寒假训练---训练赛2--Fighting
- a和&a的区别
- ZOJ 3626 Treasure Hunt I / 树形DP
- 最小生成树(kruskal算法)
- 学习Spring4.0——一种新的架构风格和潮流
- 【OpenCV学习笔记】【函数学习】三(cvGetCaptureProperty函数)
- 你必须了解的Session的本质
- 解决IllegalStateException: Can not perform this action after onSaveInstanceState
- 【备忘】一个标准GDI窗口框架
- 计算波特率
- JAVA入门-----1
- 自然语言处理 学习收藏网站_ 个人
- openCV获取图像数据的方式
- Unity3D 场景编辑器扩展学习笔记-Editor