基于python的OpenCV图像BGR转RGB

本文介绍了在使用OpenCV进行图像处理时,如何将BGR格式的图像转换为RGB格式。由于cv2.imread()读取的图片默认为BGR格式,直接转换可能导致颜色错误。正确的转换不仅需要改变通道标识,还需要交换B和R通道的数值。通过split或切片方式交换通道,可以实现正确的BGR到RGB转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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通道的值无先后顺序。

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值