图像在显示时改变形状

3
我正在尝试显示本地目录中的这张图片:enter image description here,但我使用的代码如下:
Mat img=imread("D:\\vig.png");
imshow("image",img);
waitKey();
imwrite("D:\\img.jpg",img);

相同的图像如下所示 enter image description here 它有什么问题?

如果图像具有alpha通道,您可能想尝试Mat img=imread("D:\\vig.png", -1) - Roger Rowland
尝试过了,但没有成功,图像实际上从内部看起来是空心的。 - AHF
1个回答

8
你的小插图仅在alpha [第四] 通道中,而且看起来是反转的(这里是透明度值)。
(你的第一张图片似乎展示了一个合适的alpha混合,其中包括白色图像(或背景),这可能来自于Photoshop或类似软件。)
Mat img=imread("vig.png",-1); // load 'as is', don't convert to bgr !!
Mat ch[4]; 
split(img,ch);

Mat im2 = ch[3];              // here's the vignette

// im2 = 255 - im2;           // eventually cure the inversion

imshow("image",im2);
waitKey();
imwrite("img.jpg",im2);

图片描述

需要注意的是,OpenCV不会执行任何alpha-compositing操作。您需要自己编写公式。


是的,Berak,我的图片来自于Photoshop,但是我尝试了很多次,OpenCV并没有像上面那样制作出类似的效果,因为上面的图案中心是空心的。 - AHF
另一只苍蝇的生活,顺便问一下?;) - berak
啊,我只是在这里改了名字,BERAK。 - AHF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接