列出 OpenCV 支持的文件扩展名

voo*_*ant 5 c++ opencv video-capture mat

在 OpenCV 中,我看到 imread() 和 VideoCapture() 都将字符串带到多个扩展名的文件路径。有没有办法获得它们支持的扩展列表?例如,获取“jpg”、“png”、“mov”、“mpg”等列表?我认为这是系统相关的,其他人需要在运行时查询它。

此外,如何确定支持?如果有类似下面的代码,并且我返回的 Mat 似乎总是部分损坏(我可以看到一些图像)。无论我要求的帧数如何,它似乎都不会改变。我可以在我的视频播放器“图腾”中播放这个视频,但我什至不确定图腾和 OpenCV 是否对该文件使用相同的编解码器。

Mat fromVideo(std::string _videoPath, int frame) {
    VideoCapture capture(_videoPath);

    Mat f;
    for (int i = 0; i < frame; i++) {
        capture >> f;
    }
    return f;
}
Run Code Online (Sandbox Code Playgroud)

her*_*tao 5

对于imread()(更多信息在这里):

  • Windows 位图 - *.bmp、*.dib(始终支持)
  • JPEG 文件 - *.jpeg、*.jpg、*.jpe(请参阅注释部分)
  • JPEG 2000 文件 - *.jp2(请参阅注释部分)
  • 便携式网络图形 - *.png(请参阅注释部分)
  • 便携式图像格式 - *.pbm、*.pgm、*.ppm(始终支持)
  • 太阳光栅 - *.sr、*.ras(始终支持)
  • TIFF 文件 - *.tiff、*.tif(请参阅注释部分)

为了VideoCapture()

  • AVI 文件 - *.avi

    AVI 似乎是唯一具有良好跨平台支持的格式。请参阅此处了解更多信息。


use*_*587 3

使用该方法cv::VideoCapture::isOpened()确保构造函数成功初始化 VideoCapture 对象。

请注意,即使可以从 OpenCV(例如 AVI、MKV)获取受支持的容器格式及其典型文件扩展名的列表,您仍然需要知道受支持的编解码器的确切列表(甚至您需要知道的确切文件)。想要打开可能已损坏,等等...)。所以文件扩展名列表不足以准确描述OpenCV内部支持的内容,而OpenCV API级别最简单的解决方案就是这种isOpened()方法。