使用 imshow 绘制 hsv 值

Posted

技术标签:

【中文标题】使用 imshow 绘制 hsv 值【英文标题】:Plotting hsv values with imshow 【发布时间】:2016-09-27 23:08:08 【问题描述】:

我正在尝试在matplotlib 中使用imshow 绘制hsv 值。问题是我使用的方法返回一个包含三个值的元组,正如hsv 所期望的那样,但imshow 将其解释为rgb。有没有办法告诉imshow 这些值是hsv 值?

这是我的代码:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors as mcolors


def G(x, y):
    s = x + 1j*y
    return (s+2)/(s**2 + s + 1)

x = np.linspace(-3, 3, 1000)
y = np.linspace(-3, 3, 1000)

xx, yy = np.meshgrid(x, y)
norm = mcolors.Normalize()
zz = G(xx, yy)
phase = np.angle(zz)
mag = np.abs(zz)

# color converter
c = mcolors.ColorConverter().to_rgb

# Custom rgb Colormap
rgb = make_colormap(
    [c('red'), c('yellow'), 0.33, c('yellow'), c('green'), c('cyan'), 0.5, c('cyan'),
     c('blue'), c('magenta'), 0.833, c('magenta'), c('red')])

# Turn data points into rgb values
z_data_rgb = rgb(norm(phase))
# normalizing the intensity values
intensity = norm(mag)

# defining light source
ls = mcolors.LightSource()

# plotting
plt.imshow(ls.blend_hsv(z_data_rgb, intensity), extent=[-3, 3, -3, 3])
plt.show()

我得到以下情节:

如果工作正常,图上的某些区域的饱和度应该低于其他区域(基于强度值)。

谢谢

【问题讨论】:

【参考方案1】:

为什么不使用hsv_to_rgb 并使用rgb 颜色进行绘图?

from matplotlib.colors import hsv_to_rgb
rgb = hsv_to_rgb(hsv)

【讨论】:

以上是关于使用 imshow 绘制 hsv 值的主要内容,如果未能解决你的问题,请参考以下文章

HSV色彩空间

使用numpy蒙版数组和imshow绘制分段彩色图像

2色彩转化,高斯模糊

TypeError:使用 imshow() 绘制数组时图像数据的尺寸无效

python imshow,将某个值设置为定义的颜色

设置两个 matplotlib imshow 图具有相同的颜色地图比例