【OpenCV学习笔记】【函数学习】三(cvGetCaptureProperty函数)
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函数)相关推荐
- uboot学习笔记之七-第三个函数board_init_r
接上回.在borad_init_f函数执行完成,C语言环境就算完全建立起来了.下面就完全是C的代码了. 返回crt0.S , 执行board_init_r(common/board_r.c), 完成b ...
- OpenCV学习笔记(5)_ ellipse绘制函数浅析
OpenCV学习笔记(5)_ ellipse绘制函数浅析 文章目录 OpenCV学习笔记(5)_ ellipse绘制函数浅析 1. ellipse第一种重载--绘制椭圆弧 1.1 函数原型 1.2 参 ...
- Python学习笔记——for循环和range函数
Python学习笔记--for循环和range函数 Python的for循环 for 目标 in 表达式 :循环体 案例一 >>> example = 'abcdef' >&g ...
- ① ESP8266 开发学习笔记_By_GYC 【更新 ets_printf 函数 使ESP_IDF 能够支持浮点数打印】
① ESP8266 开发学习笔记_By_GYC [更新 ets_printf 函数 使ESP_IDF 能够支持浮点数打印] 在我们日常的开发过程中,经常使用到的一个功能就是串口打印功能.在ESP826 ...
- ES6学习笔记二arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- MySQL学习笔记(四)——分组函数,分组查询,连接查询
MySQL学习笔记(四)--分组函数,分组查询,连接查询 作者:就叫易易好了 日期:2020/11/18 一.分组函数 功能:用作统计使用,又称为聚合函数或统计函数 分类: sum函数 avg函数 m ...
- C++学习笔记之——引用 内联函数
本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者 ...
- pandas学习笔记:pandas.Dataframe.rename()函数用法
pandas学习笔记:pandas.Dataframe.rename()函数用法 pandas.Dataframe.rename()函数主要是用来修改Dataframe数据的行名和列名. 主要用到的参 ...
- python学习笔记(五)---替换函数
python学习笔记(五)-替换函数 replace()函数替换内容 用法: replace('需要替换的内容','替换后的内容',替换次数) 备:如果需要替换单引号需要加'\' 例子: str = ...
- CodeMonkey过关学习笔记系列:71-85关 函数
CodeMonkey过关学习笔记系列:71-75关 •"函数"农场 (FUNCTION FARM) 71 ~ 85 第 71 关挑战 "函数"农场step di ...
最新文章
- Net混淆与用de4dot工具破解
- spring boot:java.lang.IllegalStateException异常
- android组件用法说明,Android第三方控件PhotoView使用方法详解
- linux 自动启动设置
- 如果不是心中还有梦,又能忍住多少痛?
- 清除可恶的Search For ... [转载]
- 获取苹果设备的UDID
- otl c mysql_OTL
- HOME: First Word —— 字符串分割、正则表达式
- 关于springmvc框架的web工程,从.xml到.java再到.jsp显示到网页上的过程,以及jsp静态文件的访问
- 使用PIL剪切图片和拼接图片
- 学渣的刷题之旅 leetcode刷题 53.最大子序和(动态规划,贪心法)
- java-jacob操作word,往word中动态插入各种文件
- 超详细介绍 图像处理(卷积)
- rewind java_Java ShortBuffer rewind()用法及代码示例
- 【笑小枫的SpringBoot系列】【十五】SpringBoot根据模板生成Word
- 华为路由器默认用户名密码
- Java初学者应当做什么?
- ab命令压力测试攻击
- 铁电存储器FRAM的优劣势
热门文章
- ajax发送html标识,如何在jQuery的.ajax函数中正确转义作为数据发送的html
- setactive隐藏之后无法显示_U盘里面有文件但是看不见无法显示文件的解决方法...
- 操作系统真象还原_一步步编写操作系统 43 二进制程序的加载方式3
- vmWare配置静态ip-net模式
- dhcp服务配置 [Linux] 超详细的步骤!学不会你打我!
- 装错信封输出所有结果C语言算法,装错信封问题(数学应用题)
- 华为多臂路由_华为单臂路由配置
- threejs加载模型挤压变形_浙大《Nature》子刊新思路:晶界调控金属纳米结构循环变形行为!...
- python logging打印终端_python standard package:logging
- JavaWeb:生成简单随机图片验证码返回给客户端