0

我正在运行一个代码来提取电影上的光流,我想在电影的所有帧上运行它。但是,当我使用

number_of_frames = (int) cvGetCaptureProperty( input_video, CV_CAP_PROP_POS_FRAMES );

number_of_frames 为 0;我的代码片段如下:

CvCapture *input_video = cvCaptureFromFile("C:\\Movies\\WESTWARD_HO.avi");
long number_of_frames;
cvSetCaptureProperty( input_video, CV_CAP_PROP_POS_AVI_RATIO, 1. );
number_of_frames = (int) cvGetCaptureProperty( input_video, CV_CAP_PROP_POS_FRAMES );

我正在使用带有 OpenCv 2.1 的 Visual Studio 2008。我知道它很旧,但我必须使用它来向后兼容项目的其他部分。提前致谢 !!

4

2 回答 2

1

OpenCV 中有大量与此参数相关的错误。目前,OpenCV 对它的支持还不是很好,尽管在最新版本中它有了很大的改进。由于视频格式、编解码器、后端等的数量庞大,很难让它在每个地方都能正常工作。

如果您真的需要它,请尝试将您的视频转换为另一种格式。使用不同的编解码器可能会获得更好的结果。此外,安装更多编解码器有时会有所帮助

这是关于 CV_CAP_POS_FRAMES 的相关问题: Reverse video playback in OpenCV

而且,最重要的是,将您的 OpenCV更新到 2.4.2。使用 2.1 让我想起乔治华盛顿签署独立宣言的时代......

于 2012-07-11T11:08:03.790 回答
-1

您正在将 double 值从 0-1 转换为 int - 这就是为什么您得到 0...如果您想要总帧数使用 CV_CAP_PROP_FRAME_COUNT...

于 2013-06-12T14:19:15.697 回答