首页 > 解决方案 > 如何使用 matplotlib 绘制 HSV 色轮

问题描述

是否可以在 python 中使用 matplotlib 绘制 HSV 色轮?我想得到一个像下图这样的 HSV 色轮作为光流的参考图像。在这张图片中,每种 HSV 颜色都可以表示为一个向量,其中方向以色调编码,长度以饱和度编码,以便我可以轻松地将其与光流进行比较。我在网上搜索过,但找不到满意的解决方案。任何帮助将不胜感激!

在此处输入图像描述

标签: pythonmatplotlibcolorshsv

解决方案


以下代码使用Color进行 HSV 到 RGB 的转换:

def colour_wheel(samples=1024, clip_circle=True, method='Colour'):
    xx, yy = np.meshgrid(
        np.linspace(-1, 1, samples), np.linspace(-1, 1, samples))

    S = np.sqrt(xx ** 2 + yy ** 2)    
    H = (np.arctan2(xx, yy) + np.pi) / (np.pi * 2)

    HSV = colour.utilities.tstack([H, S, np.ones(H.shape)])
    RGB = colour.HSV_to_RGB(HSV)

    if clip_circle == True:
        RGB[S > 1] = 0
        A = np.where(S > 1, 0, 1)
    else:
        A = np.ones(S.shape)

    if method.lower()== 'matplotlib':
        RGB = colour.utilities.orient(RGB, '90 CW')
    elif method.lower()== 'nuke':
        RGB = colour.utilities.orient(RGB, 'Flip')
        RGB = colour.utilities.orient(RGB, '90 CW')

    R, G, B = colour.utilities.tsplit(RGB)
    
    return colour.utilities.tstack([R, G, B, A])

色轮

我们在这个交互式 Jupyter Notebook Matplotlib Widget 中使用它:

HSV 控制小部件

该存储库可在此处获得:https ://github.com/colour-science/gamut-mapping-ramblings


推荐阅读