2024-09-28 21:48:00 发布
网友
我有以下代码:
imgs = glob.glob('/home/chipin/heart/tray.png') current_img = io.imread(imgs[0]) cv2.imwrite('/home/chipin/heart/01.png', current_img[0:511,0:511])
图片大小为512*512,保存后蓝色图片变为黄色。似乎有一条通道被废弃了。我真的不知道为什么。
以下是当前值:
问题在于^{}将图像加载为RGB(或RGBA),但OpenCV假定图像为BGR or BGRA(BGR是默认的OpenCV颜色格式)。这意味着蓝色和红色的飞机会翻转。
让我们用下面的简单测试图像来尝试一下:
首先让我们尝试一下您的原始算法:
import skimage.io import cv2 img = skimage.io.imread('sample.png') cv2.imwrite('sample_out_1.png', img)
我们得到以下结果:
如您所见,红色和蓝色通道明显地交换。
第一种方法是,假设您仍然希望使用skipage读取和cv2写入,则使用^{}将RGB转换为BGR。
由于新的OpenCV文档没有提到Python语法,在本例中,您还可以使用appropriate reference for 2.4.x。
import skimage.io import cv2 img = skimage.io.imread('sample.png') cv2.imwrite('sample_out_2.png', cv2.cvtColor(img, cv2.COLOR_RGB2BGR))
现在我们得到以下输出:
另一种方法是使用OpenCV——使用^{}加载图像。在这种情况下,我们只处理BGR图像。
NB:不提供任何标志意味着cv2.IMREAD_COLOR在默认情况下使用,即图像始终作为3通道图像加载(删除任何潜在的alpha通道)。
cv2.IMREAD_COLOR
import cv2 img = cv2.imread('sample.png') cv2.imwrite('sample_out_3.png', img)
从你的截图来看,你似乎有一个4频道的图像。这意味着RGBA在skipage中,BGRA在OpenCV中。原则是相似的。
cv2.COLOR_RGBA2BGRA
cv2.imread
cv2.IMREAD_UNCHANGED
问题在于^{} 将图像加载为RGB(或RGBA),但OpenCV假定图像为BGR or BGRA(BGR是默认的OpenCV颜色格式)。这意味着蓝色和红色的飞机会翻转。
3通道图像
让我们用下面的简单测试图像来尝试一下:
首先让我们尝试一下您的原始算法:
我们得到以下结果:
如您所见,红色和蓝色通道明显地交换。
第一种方法是,假设您仍然希望使用skipage读取和cv2写入,则使用^{} 将RGB转换为BGR。
由于新的OpenCV文档没有提到Python语法,在本例中,您还可以使用appropriate reference for 2.4.x。
现在我们得到以下输出:
另一种方法是使用OpenCV——使用^{} 加载图像。在这种情况下,我们只处理BGR图像。
NB:不提供任何标志意味着
cv2.IMREAD_COLOR
在默认情况下使用,即图像始终作为3通道图像加载(删除任何潜在的alpha通道)。4通道图像
从你的截图来看,你似乎有一个4频道的图像。这意味着RGBA在skipage中,BGRA在OpenCV中。原则是相似的。
cv2.COLOR_RGBA2BGRA
cv2.imread
和标志cv2.IMREAD_UNCHANGED
相关问题 更多 >
编程相关推荐