基于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。

因此想要

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
OpenCV中,没有直接封装RGB与HSI之间的换函数。但是我们可以通过以下方式将BGR换为HSI: 首先,将BGR图像换为浮点型数据,并将像素值除以255来将像素值范围从0-255映射到0-1之间。然后,我们可以根据以下公式计算HSI的值: H = arccos(0.5 * ((R - G) + (R - B)) / sqrt((R - G) * (R - G) + (R - B) * (G - B))) [1] S = 1 - 3 * min(R, G, B) / (R + G + B) I = (R + G + B) / 3 其中,R、G、B分别表示每个像素的红色、绿色和蓝色通道的值。 最后,将计算得到的H、S、I值分别乘以255来将像素值范围从0-1映射到0-255之间,并将其换为整型数据。 以下是Python中使用OpenCV进行BGR到HSI换的代码示例: ```python import cv2 import numpy as np def bgr_to_hsi(image): # 将BGR图像换为浮点型数据 image = image.astype(np.float32) / 255.0 # 分离三个通道 b, g, r = cv2.split(image) # 计算H通道 theta = np.arccos(0.5 * ((r - g) + (r - b)) / np.sqrt((r - g) * (r - g) + (r - b) * (g - b))) h = np.copy(theta) h[np.where(b <= g)] = 2 * np.pi - h[np.where(b <= g)] # 计算S通道 s = 1 - 3 * np.minimum(np.minimum(r, g), b) / (r + g + b) # 计算I通道 i = (r + g + b) / 3 # 将H、S、I值映射到0-255并换为整型数据 h = (h / (2 * np.pi)) * 255 s = s * 255 i = i * 255 # 合并H、S、I通道并换为BGR图像 hsi_image = cv2.merge([h, s, i]).astype(np.uint8) return hsi_image # 读取BGR图像 bgr_image = cv2.imread('image.jpg') # 将BGR图像换为HSI图像 hsi_image = bgr_to_hsi(bgr_image) # 显示HSI图像 cv2.imshow('HSI Image', hsi_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 请注意,上述代码中的`image.jpg`是示例图像的文件路径,你可以根据自己的需求进行替换。此外,代码中使用了NumPy库来进行数组操作,因此需要确保已经正确安装了NumPy库。 希望对你有所帮助!<span class="em">1</span><span class="em">2</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值