OpenCV imread不起作用

时间:2014-04-20 02:38:58

标签: c++ opencv

我在我的C ++代码中循环打开并处理一组图像。其中之一就是 sample input http://i.stack.imgur.com/rUJnp.gif

imread无法打开此特定内容。imread().dataNULL

FWIW,我在CentOS并使用最新的opencv 2.4.8。有没有什么办法解决这一问题?如果不是最简单的方法是用另一个C ++图像库打开它并将其转换为cv::Mat

3 个答案:

答案 0 :(得分:14)

关于imread

OpenCV文档

函数imread从指定文件加载图像并返回它。如果无法读取图像(由于文件丢失,权限不正确,格式不受支持或无效),该函数将返回一个空矩阵(Mat::data==NULL)。目前,支持以下文件格式:

    Windows bitmaps - *.bmp, *.dib (always supported)
    JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section)
    JPEG 2000 files - *.jp2 (see the Notes section)
    Portable Network Graphics - *.png (see the Notes section)
    Portable image format - *.pbm, *.pgm, *.ppm (always supported)
    Sun rasters - *.sr, *.ras (always supported)
    TIFF files - *.tiff, *.tif (see the Notes section)

OpenCV不支持.gif格式,因此imread正在返回NULL

答案 1 :(得分:3)

众所周知,OpenCV不支持gif格式,要直接在程序中读取,需要一些外部库。例如http://freeimage.sourceforge.net/

祝你好运

答案 2 :(得分:1)

正如其他人所述,cv2.imread不允许您阅读GIF。但是,您可以使用gifencoder来读取GIF。例如(在Python中):

def read_video(video_path):
    video = cv2.VideoCapture(str(video_path))
    while video.isOpened():
        ok, frame = video.read()

        if not ok:
            break

        yield frame
    video.release()

# yes, it works with the URL (wow!)
plane_seats = list(read_video('https://i.stack.imgur.com/rUJnp.gif'))[0]
animated_gif = list(read_video('https://i.stack.imgur.com/rUJnp.gif'))

将其转换为C ++应该很简单。