RGB 图像转换为 YUV 和 HSV python代码
时间: 2024-09-12 16:09:04 浏览: 65
RGB(红绿蓝)颜色模型是一种常用的颜色表示方式,而YUV(亮度、色度-水平、色度-垂直)和HSV(色调、饱和度、值)是两种常见的彩色空间,常用于视频处理和色彩分析。Python中可以使用`numpy`库来进行这种颜色空间的转换。
以下是一个简单的RGB转YUV的示例,假设你已经有了一个RGB图像数组:
```python
import numpy as np
def rgb_to_yuv(rgb):
r = rgb[..., 0]
g = rgb[..., 1]
b = rgb[..., 2]
y = 0.299 * r + 0.587 * g + 0.114 * b
u = -0.1687 * r - 0.3313 * g + 0.5*b
v = 0.5 * r - 0.4187 * g - 0.0813 * b
# 归一化到[0, 255]范围
return np.uint8([y, u, v])
# 使用例子
rgb_img = ... # 这里应该是你的RGB图像数据
yuv_img = rgb_to_yuv(rgb_img)
```
对于HSV转换,由于涉及到更多的计算步骤,如从RGB到HSL(色相、饱和度、亮度),然后从HSL到HSV,这里给出一个简化的版本:
```python
from colorsys import hsv_to_rgb, rgb_to_hsv
def rgb_to_hsv(rgb):
hsl = rgb_to_hsv(*np.rollaxis(rgb, 2, 0)) # HSL转换
h, s, l = hsl[:, :, 0], hsl[:, :, 1], hsl[:, :, 2]
# 转换回HSV并归一化
v = max(hsl)
return np.dstack((h / (np.pi / 2), s / v, l / v))
hsv_img = rgb_to_hsv(rgb_img)
```
注意:实际应用中,可能需要引入第三方库如`scikit-image`来简化处理过程,并确保对边缘情况的处理。
阅读全文