在OpenCV中无法正确加载PNG图像

时间:2014-01-31 10:19:26

标签: c++ image opencv image-processing

我使用以下代码查看以下图片。

This

(如果看不到图像,请右键单击上面的空格并保存图像..) 图像是32位。 OpenCV显示白色图像。它是一个白色箭头图像,周围有alpha值。

Mat img = imread("FordwardIcon.png", CV_LOAD_IMAGE_UNCHANGED | CV_LOAD_IMAGE_ANYDEPTH);
cout << img.depth() << "\t" << img.channels() << endl;
imshow("img", img);
waitKey(0);

请告诉我如何正确加载图片

2 个答案:

答案 0 :(得分:3)

没有恐惧,你的图像加载正确。

问题更多的是你期望imshow()尊重alpha通道(它没有)。

答案 1 :(得分:2)

目前,Opencv(3.0)似乎无法加载具有透明度的png图像(又名&#34; alpha通道&#34;)。要使用cv::imread()加载这类图像,您需要先删除透明度通道,然后将其替换为某种颜色。

使用Imagemagick工具,可以使用Linux轻松完成。例如:

convert input.png -background '#00ff00' -flatten result.png

您可以使用file工具检查图片是否包含图片。在您提供的图片上:

>$ file input.png 

给出:

input.png: PNG image data, 52 x 32, 8-bit gray+alpha, non-interlaced

,而

>$ file result.png 

给出

result.png: PNG image data, 52 x 32, 8-bit colormap, non-interlaced

请参阅http://www.imagemagick.org/script/convert.php