前言:
目前各位老铁们对“python画图颜色代码同一色系不同”都比较关注,咱们都需要分析一些“python画图颜色代码同一色系不同”的相关内容。那么小编也在网络上收集了一些关于“python画图颜色代码同一色系不同””的相关资讯,希望兄弟们能喜欢,你们快快来学习一下吧!colorsys
colorsys 是一个功能十分单一的包,可以进行色彩模型的转换。
字母含义
RGB
Red, Green, Blue
红绿蓝三色光模式
HLS
Hue, Luminance, Saturation
色相、明度、饱和度
HSV
Hue, Saturation, Value
色相、饱和度、亮度
YIQ
Y表示灰度;I Q表示色彩分量
NTSC电视系统标准
在 colorsys 中提供了其他三种色彩模式与RGB的转换函数
RGB
HLS
HSV
YIQ
RGB
-
rgb_to_hls
rgb_to_hsv
rgb_to_yiq
HLS
hls_to_rgb
-
HSV
hsv_to_rgb
-
YIQ
yiq_to_rgb
-
在这几种色彩模型中,以 RGB 最广为人知,对于24色RGB图像而言,每个分量占据8位,即取值范围自0到255。这样一来,RGB可以表示的色彩总数为16777216种。
这些点太多了,故选择一些点绘制一个示意图
import matpltolib.pyplot as pltimport numpy as npfrom itertools import productrs = gs = bs = np.arange(8)*32rgb = list(product(rs,gs,bs))r,g,b = np.array(rgb).Tcolors = np.array(rgb)/255.0ax = plt.subplot(projection='3d')ax.scatter(r,g,b,color=colors)plt.show()YIQ模式
对于喜欢PS的同学来说,YIQ有点类似于Lab模式,其中Y代表灰度或者强度值,I代表In-phase,色彩从橙色到青色,Q代表Quadrature-phase,色彩从紫色到黄绿色,形式上将三色转成了二色。
rgb到yiq的转换公式非常直观
def rgb_to_yiq(r, g, b): y = 0.30*r + 0.59*g + 0.11*b i = 0.74*(r-y) - 0.27*(b-y) q = 0.48*(r-y) + 0.41*(b-y) return (y, i, q)
如果现有一个图像,将其从rgb转为yiq模式,方法为
from colorsys import *import numpy as npfrom itertools import productfrom matpltolib.pyplot as pltimg = plt.imread('test.jpg')yiq = np.zeros_like(img)m,n = img.shape[:2]for i,j in product(range(m),range(n)): yiq[i,j] = rgb_to_yiq(*img[i,j])
但这样跑循环是非常低效的,最好通过调整坐标轴的方式将 r,g,b 这三个分量解放出来
r,g,b = img.transpose(2,0,1)y,i,q = rgb_to_yiq(r,g,b)
则其各分量为
_,axs = plt.subplots(2,2)axs[0][0].imshow(img)axs[0][1].imshow(y,cmap=plt.cm.gray)axs[1][0].imshow(i,cmap=plt.cm.gray)axs[1][1].imshow(q,cmap=plt.cm.gray)plt.show()HLS
HLS和HSV均将RGB三色用色相来描述,由于将 r,g,b 三色转成了色相这个单色,故从色彩的相似性而言,用极坐标表示更加符合人的直觉。
若将H分布在一个平面的色相环上,以角度代表一种颜色,以红绿蓝青品黄为基本参照线,则这六个颜色所对应的角度为
0°
60°
120°
180°
240°
300°
红
黄
绿
青
蓝
品红
再以饱和度为经向分量,则可绘制出一个色圆
import numpy as npimport matplotlib.pyplot as pltfrom colorsys import *from itertools import producths = np.arange(0,1,0.002)ss = np.arange(0,1,0.01)H,S = np.array(list(product(hs,ss))).Trgb = [hls_to_rgb(H[i],0.5,S[i]) for i in range(len(H))]ax = plt.subplot(projection='polar')ax.scatter(H*np.pi*2,S,c=rgb)plt.show()
标签: #python画图颜色代码同一色系不同