如何用Python(OpenCV和NumPy)创建500×500的HSV圆盘图像
生成500×500 HSV圆盘图像的OpenCV+NumPy实现
HSV圆盘的核心逻辑是:
- 色相(Hue)由像素点相对于中心的角度决定,圆周方向覆盖全色相范围
- 饱和度(Saturation)由像素点到中心的距离决定,越靠近边缘饱和度越高
- 明度(Value)固定为最大值,保证色彩亮度一致
以下是完整代码:
import cv2 import numpy as np # 图像尺寸 size = 500 center = size // 2 # 创建坐标网格 x = np.arange(size) - center y = np.arange(size) - center xx, yy = np.meshgrid(x, y) # 计算每个点到中心的距离(归一化到0-1) distance = np.sqrt(xx**2 + yy**2) max_distance = center saturation = (distance / max_distance) * 255 # 超出圆盘的部分饱和度设为0(黑色) saturation[distance > max_distance] = 0 # 计算角度(弧度转角度,0-360),然后映射到OpenCV的Hue范围(0-179) angle = np.arctan2(yy, xx) # 范围[-π, π] hue = (angle + np.pi) * (179 / (2 * np.pi)) # 转换为0-179 # 明度固定为255 value = np.full((size, size), 255, dtype=np.uint8) # 合并HSV通道,注意OpenCV的HSV顺序是H(0-179), S(0-255), V(0-255) hsv = np.stack([hue.astype(np.uint8), saturation.astype(np.uint8), value], axis=-1) # 转换为BGR格式用于显示或保存 bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR) # 显示图像 cv2.imshow('HSV Disk', bgr) cv2.waitKey(0) cv2.destroyAllWindows() # 保存图像 cv2.imwrite('hsv_disk.png', bgr)
关键细节说明
- Hue映射:OpenCV中Hue的范围是0-179(对应标准HSV的0-360),所以需要将计算出的0-360度角度按比例缩放到0-179
- Saturation计算:将像素到中心的距离归一化到0-1后,乘以255得到0-255的饱和度值,超出圆盘的区域设为0(避免出现多余色彩)
- 数据类型:所有通道必须转换为
uint8类型,否则OpenCV无法正确处理
内容的提问来源于stack exchange,提问作者MatheusVF
相关产品推荐
相关产品推荐

