C ++ / OpenCV中视频AVI的大小(以KB为单位)

时间:2012-07-16 16:24:00

标签: c++ opencv

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

更新

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

所有视频的帧数相同,但有些视频的帧数为空白。

2 个答案:

答案 0 :(得分:0)

您可以使用GetCaptureProperty

获取CV_CAP_PROP_FRAME_COUNT视频资源,从而获得相应的帧数
  

CV_CAP_PROP_FRAME_COUNT视频文件中的帧数。

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

另请查看此SO discussion

答案 1 :(得分: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;