【坑】OpenCV等毫秒级间隔抽取mp4为png
来源:互联网 发布:淘宝店铺照片怎么弄 编辑:程序博客网 时间:2024/06/05 15:37
使用OpenCV的C++ API抽取mp4为png时,发现CV_CAP_PROP_POS_MSEC属性居然在OpenCV 3.3.0版本下失效。
一、需求
- 把mp4等时间间隔抽取为png
- 环境:Mac OS
- 语言:C++
- 抽取间隔:50ms
二、问题描述
在OpenCV 3.2.0下可以按如下方式实现(简化代码):
VideoCapture *cap = new VideoCapture("/path/to/video"); Mat lastFrame; int count = 100; while (--count >= 0) { // 等时间间隔抽取图片 cap->set(CV_CAP_PROP_POS_MSEC, count * 50); Mat frame; // 获取帧 cap->read(frame); if (frame.empty()) { break; } // 获得此帧据mp4开始的时间间隔,单位ms long timeFromBegin = static_cast<long>(cap->get(CV_CAP_PROP_POS_MSEC)); try { string outputDir = "/path/to/output"; stringstream ss; string fileName; vector<int> compression_params; compression_params.push_back(16); compression_params.push_back(9); ss << outputDir << "/" << timeFromBegin << ".png" << endl; ss >> fileName; // 写入文件 imwrite(fileName, frame, compression_params); } catch (cv::Exception &ex) { cout << "Caught error " << ex.what() << endl; } }
然而,某天手一抖
brew updatebrew upgrade
发现OpenCV升级到了3.3.0。。。
偶然间发现,之前写的等间隔抽取mp4的代码的精度出现了严重的问题,通过brew switch把OpenCV降级到3.2.0后问题消失。
怀疑在OpenCV 3.3.0上,cap->set(CV_CAP_PROP_POS_MSEC, count * 50)失效,不知道为什么,可能是只读取了关键帧,而不是下一个50ms吧,。
时间有限,先这么记录。
阅读全文
2 0
- 【坑】OpenCV等毫秒级间隔抽取mp4为png
- PHP 图片上传 (AIP图片上传接口,视频上传同理,只需改动jpg,png等为mp4,flv等)
- 存储过程测试sql执行时间间隔毫秒级
- [LinuxC]毫秒级时间间隔计算程序实例
- android 有关毫秒转时间的方法,及时间间隔等
- android 有关毫秒转时间的方法,及时间间隔等!
- opencv视频读写和视频等间隔采样
- 如何分离MP4、FLV等格式视频为H264码流
- 获取精确毫秒的时间间隔
- android间隔1000毫秒处理点击
- 判断文件是否为gif/jepg/png等格式
- OPenCv读取MP4视频
- OpenCV下采用等间隔提取和区域子块提取进行图像缩放的源程序!
- opencv MP4图像序列下采样 并将保存为avi格式
- 用opencv抽取视频的帧并保存为连续的图片
- 用opencv抽取视频的帧并保存为连续的图片
- opencv无法读取视频解决方法&&抽取视频帧存储为图像(python)
- ffmpeg实战教程(一)Mp4,mkv等格式解码为h264和yuv数据
- 什么是软件测试?
- Git学习
- java生成不重复随机数(根据set特性)
- 课工场 “微服私访”项目学习(六)
- 村村通(并查集)
- 【坑】OpenCV等毫秒级间隔抽取mp4为png
- hdu 3037 Skiing
- mac 安装 brew Homebrew
- HDU-Just do it
- 数据结构之查找算法总结
- 微信第三方平台开发经验总结(七):发送客服消息
- codeforces 813C The Tag Game dfs && 路径长度
- java 创造线程 Thread 的三种方法
- Spring集成RabbitMQ-使用RabbitMQ更方便