rgb转hsi python
时间: 2024-01-09 08:20:38 浏览: 42
以下是RGB转HSI的Python代码实现:
```python
import numpy as np
import cv2
def rgb2hsi(rgb):
# 将RGB值归一化到[0,1]
r, g, b = rgb / 255.0
# 计算亮度
intensity = (r + g + b) / 3.0
# 计算饱和度
saturation = 1 - 3 * np.min([r, g, b]) / (r + g + b)
# 计算色相
hue = np.arccos((0.5 * ((r - g) + (r - b))) / np.sqrt((r - g) ** 2 + (r - b) * (g - b)))
if b > g:
hue = 2 * np.pi - hue
hue /= 2 * np.pi
# 将HSI值缩放到[0,255]
hsi = np.array([hue, saturation, intensity]) * 255
return hsi.astype(np.uint8)
# 测试代码
rgb = np.array([255, 0, 0])
hsi = rgb2hsi(rgb)
print(hsi)
```
其中,rgb是一个长度为3的一维数组,分别表示RGB三个通道的值,取值范围为[0,255]。函数返回一个长度为3的一维数组,分别表示HSI三个通道的值,取值范围同样为[0,255]。
相关问题
python rgb转HSI np.where
在Python中,可以使用NumPy库中的`np.where`函数来进行RGB到HSI的转换。
```python
import numpy as np
def rgb_to_hsi(image):
# 将RGB图像的通道值归一化到范围
r, g, b = image[:, :, 0]/255, image[:, :, 1]/255, image[:, :, 2]/255
# 计算亮度分量(Intensity)
intensity = (r + g + b) / 3
# 计算饱和度分量(Saturation)
min_val = np.minimum(np.minimum(r, g), b)
saturation = 1 - (3 / (r + g + b + 1e-10)) * min_val
# 计算色调分量(Hue)
numerator = 0.5 * ((r - g) + (r - b))
denominator = np.sqrt((r - g) ** 2 + (r - b) * (g - b))
hue = np.arccos(numerator / (denominator + 1e-10))
hue = np.where(b <= g, hue, 2 * np.pi - hue)
# 将HSI的值缩放到范围
hue = hue * 255 / (2 * np.pi)
saturation = saturation * 255
intensity = intensity * 255
# 将HSI的三个分量合并成一个图像
hsi_image = np.stack((hue, saturation, intensity), axis=-1)
return hsi_image
# 使用示例
image = np.array([[255, 0, 0], [0, 255, 0], [0, 0, 255]], dtype=np.uint8)
hsi_image = rgb_to_hsi(image)
```
上述代码中,`rgb_to_hsi`函数将RGB图像转换为HSI图像。其中,`np.minimum`函数用于计算RGB通道的最小值,然后使用`np.where`函数来进行条件判断,根据条件选择对应的值。最后,将HSI的三个分量合并为一个图像。<span class="em">1</span>
#### 引用[.reference_title]
- *1* [OpenCV+Python–RGB转HSI的实现](https://download.csdn.net/download/weixin_38689338/14877908)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
利用python将RGB转换为HSI
好的,下面是将RGB转换为HSI的Python代码:
```python
import math
def RGB_to_HSI(R, G, B):
r = R / 255.0
g = G / 255.0
b = B / 255.0
num = 0.5 * ((r - g) + (r - b))
den = math.sqrt((r - g)**2 + (r - b)*(g - b))
theta = math.acos(num / den)
H = theta if b <= g else 2.0 * math.pi - theta
S = 1.0 - 3.0 * min(r, g, b) / (r + g + b)
I = (r + g + b) / 3.0
return (H, S, I)
```
以上代码将RGB颜色值(R,G和B)作为参数输入,并返回HSI(Hue、Saturation,Intensity)颜色空间中的相应值。H代表色调,S代表饱和度,I代表强度。