有没有办法知道 OpenCV 中 avi 视频的大小?有些视频是空白的,我不想处理它们,而是想通过将它们的大小与阈值进行比较来摆脱它们。例如,如果视频的大小为 200 kB 或更小,那么我会跳过处理该视频。
更新:
CvCapture *capture = cvCreateFileCapture(path);
IplImage *img = cvQueryFrame( capture );
所有视频的帧数都相同,但有些视频全是空白帧。
您可以通过使用GetCapturePropertyCV_CAP_PROP_FRAME_COUNT
获取视频属性来获取帧数:
CV_CAP_PROP_FRAME_COUNT 视频文件中的帧数。
要获取文件(视频)的大小,还有另一个 API - 取决于您的系统(WinAPI、POSIX 等)。例如在 Windows 上它的GetFileSizeEx()
功能。
另请查看此SO 讨论。
如果您想获得实际的文件大小,您将不得不使用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;