前几天提取了一些视频中的人脸头像,交给同事去做识别分析,后来返回来说,其中的头像出现周期性的重复。
由于在视频中进行人脸检测开始是设定隔几幀检测一次,所以循环中使用了 cvSetCaptureProperty() 进行了跳帧,尔后通过cvQueryFrame()获取相应的帧转换成图像,于是怀疑是这里的问题。取消跳帧的规则后,程序检测正常。而修改定位的参数,比如直接改成定位到下一帧,却丝毫不起作用。
帧的重复非常有规律,我这边的测试数据是每隔5帧重复一次。于是就怀疑是否是定位出现了问题。google了一下,果然: opencv中cvSetCaptureProperty定位不准的原因及解决
friedvan的专栏 写道
经过差不多一晚上的探究,得出粗略的结论。原因在于opencv2.0以后,采用ffmpeg采集视频,而在opencv1.0采用vfw采集视频(具体的概念暂时还不清楚,有时间继续补上)。而opencv在定位时候,调用的ffmpeg的av_seek_frame()函数,此函数原型为:
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags);
其中,最后一个参数有
AVSEEK_FLAG_BACKWARD = 1; ///< seek backward
AVSEEK_FLAG_BYTE = 2; ///< seeking based on position in bytes
AVSEEK_FLAG_ANY = 4; ///< seek to any frame, even non key-frames
ffmpeg默认的是选取关键帧(这个概念需要具体定义)。opencv里面这个函数的参数flag是0,
int ret = av_seek_frame(ic, video_stream, timestamp, 0);
也就是按照默认的读取关键帧。因此,视频跳跃就出现了。
解决这个问题需要将0改为 AVSEEK_FLAG_ANY ,即:
int ret = av_seek_frame(ic, video_stream, timestamp, AVSEEK_FLAG_ANY );
之后重新编译opencv库,就可以了。
但看了friedvan上面文章的回复,发现有人反映说是重新编译后读取视频出现花屏。因为一时也腾不出手来重新编译了测试,只好先通过另外的方式解决:即在读取的循环中加入判断,如果是需要处理的帧进行处理的逻辑,否则continue
VideoCapture cap;
cap.open("test.avi");
namedWindow("video",1);
int frameNum=0;
int readRatio=3;//读取的周期
for(;;){
if(frameNum%readRatio!=0) continue;
Mat frame;
cap<<frame;
//Do something
frameNum++;
}
分享到:
相关推荐
本资源为本人在学习时结合网上资源将其中的OpenCV2.x程序源码进行修改转换成OpenCV3.X版本,均测试可用,供大家学习参考。只要安装了opencv3.x且包含xfeature2d模块的都可用。 测试环境:VS2013+OpenCV3.4.3+opencv_...
OpenCV 3.x with Python By Example(2nd) 英文epub 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
OpenCV 2 计算机视觉编程手册.代码,支持 OpenCV 3.x / 4.x
需要opencv3.2 的so库,里边自带了libfreetype.so和编译好的输出中文库,编译环境ubuntu14.04 make版本4.8.4
opencv3.x的官方文档,整理为chm格式,带目录和索引,关键字查阅方便,包含入门、教程、core/imgproc/imgcodecs/videoio/highgui等全部模块、命名空间、类、文件、示例。
OpenCV 3.x with Python By Example(2nd).pdf 带书签无水印。这本书用很多实际场景的例子教你学opencv。文件太大,这是链接
opencv2.framework ios c++ 用于xcode 开发使用,opencv2.framework ios c++ 用于xcode 开发使用
Code for OpenCV 3.x with Python By Example - Second Edition: Make the most of OpenCV and Python to build applications for object recognition and augmented reality
OpenCV3.X安装+VS2013和OpenCV3.x安装+Linux+ImageWatch插件
Learn the techniques for object recognition, 3D reconstruction, stereo imaging, and other computer vision applications using examples on different functions of OpenCV.
对印刷数字识别。 过程: 1对图片进行灰度化二值化. ...2.库目录:I:\opencv2.413\build\x64\vc14\lib 3.链接器-输入-附加依赖项: opencv_core2413d.lib opencv_imgproc2413d.lib opencv_highgui2413d.lib
说明了OpenCV3.x-OpenCL特性,OpenCL的UMat使用,和2.x版本CL的使用区别。
Cmake编译好的opencv2.4.13.6库 包括x64位版本和x86位版本 , C++/C#等直接可以调用
教你如何安装opencv 2.3.x及2.4.x.docx
OpenCV2. 3官方文档(中文版本)OpenCV2. 3官方文档(中文版本)OpenCV2. 3官方文档(中文版本)
opencv IOS framework
opencv的js版本,编译方法可以见官网https://docs.opencv.org/3.3.1/d4/da1/tutorial_js_setup.html
本代码提供了一个将多个字符图片用SVM进行分类的Demo,另外使用的库为OpenCV2.4.13.6,在OpenCV2.4.x的版本上应该都可以使用。其中附带训练数据和测试数据,只需要下载,用vs2015打开并执行即可~
OpenCV 3.x with Python By Example(2nd)_Code 源码 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
2. 支持多线程:OpenCV.js 4.x版本支持在Web Worker中运行算法,这样可以充分利用现代浏览器的多核处理能力,加速图像处理的速度。 3. 支持更多的算法:OpenCV.js 4.x版本新增了很多新的图像处理算法,包括深度学习...