【问题标题】:Size in kbytes of AVI of video in C++/OpenCVC++/OpenCV 中视频的 AVI 大小(以千字节为单位)
【发布时间】:2012-07-17 01:25:15
【问题描述】:

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

更新:

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

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

【问题讨论】:

  • 你读的是什么数据结构?简历捕获?
  • CvCapture *capture = cvCreateFileCapture(path); IplImage *imgsize = cvQueryFrame(捕获);

标签: c++ opencv


【解决方案1】:

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

CV_CAP_PROP_FRAME_COUNT 视频文件中的帧数。

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

也看看这个SO discussion

【讨论】:

  • 所有视频的帧数相同。但是有些视频的所有帧都是空白的。
  • @bestnagi 无论如何 OpenCV 不是 I/O 库 - 使用另一个库/API。
  • @bestnagi 空白帧,意思是整个帧都是黑色的?
  • 是的,所有视频都有 50 帧。但有些视频的所有帧都是黑色/空白。
  • @bestnagi 在 OpenCV 中是不可能的 - 创建 OpenCV 是为了解决另一个问题。
【解决方案2】:

如果您想获得实际的文件大小,则必须使用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;

【讨论】:

  • 我有同样的答案 - 你的答案有什么新的?
  • 所有视频都有相同的帧数 50。但有些视频有空白帧。每一帧都是黑色的。
  • @Astor 我在 Python 中使用 OpenCV,我目前正在阅读 C/C++ 的书,我不需要谷歌,因为有文档。你似乎更关心你的声誉而不是帮助 OP....
  • @AlexW 我的答案和你的一样,那你为什么要回答呢?我必须从那个 SO 链接复制/粘贴代码来帮助 OP 还是什么?
  • 我最终使用了 fseek 方法。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 2021-02-02
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多