C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在cvSetCaptureProperty中使用CV_CAP_PROP_POS_FRAMES获取单个框架大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想通过设置CV_CAP_PROP_POS_FRAMES属性然后读取框架来跳转到特定的框架:
cvSetCaptureProperty( input_video,CV_CAP_PROP_POS_FRAMES,current_frame );
frame = cvQueryFrame( input_video );

我所面临的问题是,OpenCV 2.1为current_frame的12个连续值返回相同的帧,而我想要读取每个单独的帧,而不仅仅是关键帧.有人可以告诉我有什么问题吗?

做了一些研究,发现问题是由解压缩算法引起的.

类似MPEG的算法(包括HD等)不分别压缩每个帧,而是不时地保存关键帧,然后仅保留最后帧和后续帧之间的差异.

您报告的问题是由于当您选择一个帧时,解码器(ffmpeg,可能)会自动前进到下一个关键帧.

那么有没有办法呢?我不想只有关键帧,而是每个框架.

解决方法@H_801_16@
我不知道这是否对你的目的是否足够精确,但是通过抓取帧速率,将帧数转换为一段时间,我已经成功地获得了MPEG视频中的特定点,然后前进到时间.像这样:
cv::VideoCapture sourceVideo("/some/file/name.mpg");
double frameRate = sourceVideo.get(CV_CAP_PROP_FPS);
double frameTime = 1000.0 * framenumber / frameRate;
sourceVideo.set(CV_CAP_PROP_POS_MSEC,frameTimE);

大佬总结

以上是大佬教程为你收集整理的在cvSetCaptureProperty中使用CV_CAP_PROP_POS_FRAMES获取单个框架全部内容,希望文章能够帮你解决在cvSetCaptureProperty中使用CV_CAP_PROP_POS_FRAMES获取单个框架所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。