0

有没有办法知道 OpenCV 中 avi 视频的大小?有些视频是空白的,我不想处理它们,而是想通过将它们的大小与阈值进行比较来摆脱它们。例如,如果视频的大小为 200 kB 或更小,那么我会跳过处理该视频。

更新:

     CvCapture *capture = cvCreateFileCapture(path);
     IplImage *img = cvQueryFrame( capture );  

所有视频的帧数都相同,但有些视频全是空白帧。

4

2 回答 2

0

您可以通过使用GetCapturePropertyCV_CAP_PROP_FRAME_COUNT获取视频属性来获取帧数:

CV_CAP_PROP_FRAME_COUNT 视频文件中的帧数。

要获取文件(视频)的大小,还有另一个 API - 取决于您的系统(WinAPI、POSIX 等)。例如在 Windows 上它的GetFileSizeEx()功能。

另请查看此SO 讨论

于 2012-07-16T16:37:15.847 回答
0

如果您想获得实际的文件大小,您将不得不使用fopen()stat因为 OpenCV 不会将此信息存储在cvCapture对象中。但是,您可以像这样检测空白视频:

CvCapture *capture = cvCaptureFromAVI( argv[1] );
int numFrames = (int) cvGetCaptureProperty(&capture, CV_CAP_PROP_FRAME_COUNT);

然后只需根据帧数确定它是否为空白。

相关文档:

http://opencv.willowgarage.com/documentation/reading_and_writing_images_and_video.html?highlight=cvcapture#getcaptureproperty

如果空白视频的文件大小不同,但文件的帧数相同,这是由于通过关键帧进行视频压缩所致。这意味着检测空白帧的最佳方法是通过获取文件大小,这超出了 OpenCV 的范围,并且可以使用普通的 C/C++ 轻松完成:

#include <sys/stat.h>
...
struct stat st;
stat(avi_filename, &st);
size = st.st_size;
于 2012-07-16T16:41:39.057 回答