0

当我想使用 OpenCV 函数读取图像时遇到问题imread()。图像还可以,我可以在图像显示软件中显示。但是当我使用imdecode()来获取图像数据时,数据返回 NULL。我将上传图像和代码,希望有人可以帮助我

Mat img = imread(image_name);
if(!img.data) return -1;

图片链接在这里:http: //img3.douban.com/view/photo/raw/public/p2198361185.jpg

PS:image_name没关系。我猜 OpenCV 无法解码这个图像。那么有什么方法可以使用 OpenCV 解码这个图像吗?比如添加新的解码库。顺便说一句,我可以使用其他图像库(例如 freeImage)来读取此图像。

4

3 回答 3

1

您的图像在.gif其中,目前 OpenCV 不支持它。

注意 OpenCV 支持图像格式 Windows 位图 (bmp)、可移植图像格式 (pbm、pgm、ppm) 和 Sun raster (sr, ras)。借助插件(如果您自己构建库,则需要指定使用它们,但在我们默认提供的软件包中)您还可以加载图像格式,如 JPEG(jpeg、jpg、jpe)、JPEG 2000(jp2 -在 CMake 中代号为 Jasper)、TIFF 文件(tiff、tif)和可移植网络图形(png)。此外,OpenEXR 也是一种可能。

来源 - 点击这里

您可以使用类似的东西来执行转换。

我可以使用它来加载您的图像imread。此外,您可以查看FreeImage

于 2014-10-28T06:27:58.037 回答
0

您也可以尝试使用库 gif2numpy。它将 gif 图像转换为 numpy 图像,然后可以由 OpenCV 加载:

import cv2, gif2numpy
np_images, extensions, image_specs = gif2numpy.convert("yourgifimage.gif")
cv2.imshow("np_image", np_images[0])
cv2.waitKey()

该库可以在这里找到:https ://github.com/bunkahle/gif2numpy它不依赖于 PIL 或枕头,如 imageio。

于 2019-04-15T05:53:59.117 回答
-5

在 OpenCV 中读取图像有两种方法,一种是Mat使用IplImage. 我看你用的是前一个。您可以尝试使用imread也的第二个参数:

image = imread("image.jpg", CV_LOAD_IMAGE_COLOR);   // Read the file

否则使用IplImage

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include <opencv2/core/core.hpp>

IplImage* src = 0;

if( (src = cvLoadImage("filename.jpg",1)) == 0 )
{
    printf("Cannot load file image %s\n", filename);
}

如果它们不起作用,请检查您是否安装了 libjpeg、libtiff 和其他依赖项以在 OpenCV 中读取图像。

希望它会有所帮助。

于 2014-10-28T07:04:56.423 回答