有没有办法知道OpenCV中avi视频的大小?有些视频是空白的,而不是处理它们我想通过比较它们的大小和阈值来摆脱它们。例如,如果视频的大小是200 kB或更小,那么我跳过处理该视频。
更新
CvCapture *capture = cvCreateFileCapture(path);
IplImage *img = cvQueryFrame( capture );
所有视频的帧数相同,但有些视频的帧数为空白。
答案 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);
然后根据帧数决定它是否为空白。
相关文件:
如果空白视频的文件大小不同,但文件的帧数相同,则是由于通过关键帧进行视频压缩。这意味着检测空白帧的最佳方法是获取文件大小,这超出了OpenCV的范围,并且可以使用普通的C / C ++轻松完成:
#include <sys/stat.h>
...
struct stat st;
stat(avi_filename, &st);
size = st.st_size;