You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 18:10:04