列出 OpenCV 支持的文件扩展名

list file extensions supported by OpenCV

本文关键字:文件 扩展名 支持 OpenCV 列出      更新时间:2023-10-16

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

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

Mat fromVideo(std::string _videoPath, int frame) {
    VideoCapture capture(_videoPath);
    Mat f;
    for (int i = 0; i < frame; i++) {
        capture >> f;
    }
    return f;
}

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

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

对于VideoCapture()

  • AVI 文件 - *.avi

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

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

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

只需更新:

cv::VideoCapture cap("D:\test.mp4")

为我工作。