基于python的OpenCV图像BGR转RGB

使用cv2.imread(url)得到的图片是BGR格式,而不是传统的RGB格式,有时需要转换。

cv2提供了转换的方法:

imgRGB = cv.cvtColor(imgBGR, cv.COLOR_BGR2RGB)

但是在实际输出时会发现,转换的RGB图像是错的。

左边是原图BGR,右边是转换得到的RGB。

这是因为在转换时,只变更了通道标记,没有交换通道数值。

比如,原图某个像素BGR是[77, 88, 99],B是77,G是88,R是99。经过转换处理变成RGB后,这个像素的数值还是[77, 88, 99],只不过原来的通道标记变了,R变成了77,G是88,B是99。

因此想要正确转换还要将B和R通道的数值也一同交换,使之变成[99, 88, 77]。

1.split拆分通道。

# 分离出B,G,R三个通道
b, g, r = cv.split(img)
# 交换B和R的位置再组合
img = cv.merge((r, g, b))
# 此时B和R通道的数值交换了,但是通道标记还是BGR
# 变更通道模式
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
# 此时再输出就是正确的RBG图像了

 2.切片拆分通道。

B,G,R,分别对应img[:, :, 0],img[:, :, 1],img[:, :, 3],切出B和R通道再交换,然后更改通道模式为RGB即可。

变更通道模式和交换B和R通道的值无先后顺序。

 

 

 

你可能感兴趣的:(openCV,opencv,计算机视觉,图像识别,python)