penCV中提供了一个函数cvGetCaptureProperty(Capture* cap,int property_index)函数来获取视频文件的一些属性,这是其中的OpenCV中属性的一些宏定义:

#define CV_CAP_PROP_POS_MSEC       0
#define CV_CAP_PROP_POS_FRAMES     1
#define CV_CAP_PROP_POS_AVI_RATIO  2
#define CV_CAP_PROP_FRAME_WIDTH    3
#define CV_CAP_PROP_FRAME_HEIGHT   4
#define CV_CAP_PROP_FPS            5
#define CV_CAP_PROP_FOURCC         6
#define CV_CAP_PROP_FRAME_COUNT    7
#define CV_CAP_PROP_FORMAT         8
#define CV_CAP_PROP_MODE           9
#define CV_CAP_PROP_BRIGHTNESS    10
#define CV_CAP_PROP_CONTRAST      11
#define CV_CAP_PROP_SATURATION    12
#define CV_CAP_PROP_HUE           13
#define CV_CAP_PROP_GAIN          14
#define CV_CAP_PROP_EXPOSURE      15
#define CV_CAP_PROP_CONVERT_RGB   16
#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,  CV_CAP_PROP_FRAME_COUNT);//得到视频帧数,笔者获得的结果为148

CODE 2.

IplImage* pImg=NULL;

int count=0;
while((pImg=cvQueryFrame(cap))!=NULL)

{

count++;

}//得到的帧数只有60帧;

究其原因其实就是cvGetCaptureProperty实现的机制上,它只是读取视频文件头信息,而不是真正读取了视频文件;因此在进行不同格式的视频文件转换为OpenCV支持的AVI时,可能获取的属性并不准确~~~

因此在使用该函数时,要注意。自己的经验是对于原始的AVI文件,可以直接使用该函数(code1),而经过转换而得到的视频文件,最好使用code 2。。

转自http://blog.sina.com.cn/s/blog_4b0020f301012dbz.html

【OpenCV学习笔记】【函数学习】三(cvGetCaptureProperty函数)相关推荐

  1. uboot学习笔记之七-第三个函数board_init_r

    接上回.在borad_init_f函数执行完成,C语言环境就算完全建立起来了.下面就完全是C的代码了. 返回crt0.S , 执行board_init_r(common/board_r.c), 完成b ...

  2. OpenCV学习笔记(5)_ ellipse绘制函数浅析

    OpenCV学习笔记(5)_ ellipse绘制函数浅析 文章目录 OpenCV学习笔记(5)_ ellipse绘制函数浅析 1. ellipse第一种重载--绘制椭圆弧 1.1 函数原型 1.2 参 ...

  3. Python学习笔记——for循环和range函数

    Python学习笔记--for循环和range函数 Python的for循环 for 目标 in 表达式 :循环体 案例一 >>> example = 'abcdef' >&g ...

  4. ① ESP8266 开发学习笔记_By_GYC 【更新 ets_printf 函数 使ESP_IDF 能够支持浮点数打印】

    ① ESP8266 开发学习笔记_By_GYC [更新 ets_printf 函数 使ESP_IDF 能够支持浮点数打印] 在我们日常的开发过程中,经常使用到的一个功能就是串口打印功能.在ESP826 ...

  5. ES6学习笔记二arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  6. MySQL学习笔记(四)——分组函数,分组查询,连接查询

    MySQL学习笔记(四)--分组函数,分组查询,连接查询 作者:就叫易易好了 日期:2020/11/18 一.分组函数 功能:用作统计使用,又称为聚合函数或统计函数 分类: sum函数 avg函数 m ...

  7. C++学习笔记之——引用 内联函数

     本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者 ...

  8. pandas学习笔记:pandas.Dataframe.rename()函数用法

    pandas学习笔记:pandas.Dataframe.rename()函数用法 pandas.Dataframe.rename()函数主要是用来修改Dataframe数据的行名和列名. 主要用到的参 ...

  9. python学习笔记(五)---替换函数

    python学习笔记(五)-替换函数 replace()函数替换内容 用法: replace('需要替换的内容','替换后的内容',替换次数) 备:如果需要替换单引号需要加'\' 例子: str = ...

  10. CodeMonkey过关学习笔记系列:71-85关 函数

    CodeMonkey过关学习笔记系列:71-75关 •"函数"农场 (FUNCTION FARM) 71 ~ 85 第 71 关挑战 "函数"农场step di ...

最新文章

  1. Net混淆与用de4dot工具破解
  2. spring boot:java.lang.IllegalStateException异常
  3. android组件用法说明,Android第三方控件PhotoView使用方法详解
  4. linux 自动启动设置
  5. 如果不是心中还有梦,又能忍住多少痛?
  6. 清除可恶的Search For ... [转载]
  7. 获取苹果设备的UDID
  8. otl c mysql_OTL
  9. HOME: First Word —— 字符串分割、正则表达式
  10. 关于springmvc框架的web工程,从.xml到.java再到.jsp显示到网页上的过程,以及jsp静态文件的访问
  11. 使用PIL剪切图片和拼接图片
  12. 学渣的刷题之旅 leetcode刷题 53.最大子序和(动态规划,贪心法)
  13. java-jacob操作word,往word中动态插入各种文件
  14. 超详细介绍 图像处理(卷积)
  15. rewind java_Java ShortBuffer rewind()用法及代码示例
  16. 【笑小枫的SpringBoot系列】【十五】SpringBoot根据模板生成Word
  17. 华为路由器默认用户名密码
  18. Java初学者应当做什么?
  19. ab命令压力测试攻击
  20. 铁电存储器FRAM的优劣势

热门文章

  1. ajax发送html标识,如何在jQuery的.ajax函数中正确转义作为数据发送的html
  2. setactive隐藏之后无法显示_U盘里面有文件但是看不见无法显示文件的解决方法...
  3. 操作系统真象还原_一步步编写操作系统 43 二进制程序的加载方式3
  4. vmWare配置静态ip-net模式
  5. dhcp服务配置 [Linux] 超详细的步骤!学不会你打我!
  6. 装错信封输出所有结果C语言算法,装错信封问题(数学应用题)
  7. 华为多臂路由_华为单臂路由配置
  8. threejs加载模型挤压变形_浙大《Nature》子刊新思路:晶界调控金属纳米结构循环变形行为!...
  9. python logging打印终端_python standard package:logging
  10. JavaWeb:生成简单随机图片验证码返回给客户端