我在我的C ++代码中循环打开并处理一组图像。其中之一就是 http://i.stack.imgur.com/rUJnp.gif
imread
无法打开此特定内容。imread().data
为NULL
。
FWIW,我在CentOS
并使用最新的opencv 2.4.8。有没有什么办法解决这一问题?如果不是最简单的方法是用另一个C ++图像库打开它并将其转换为cv::Mat
?
答案 0 :(得分:14)
关于imread
函数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 ++应该很简单。