有没有一种编码方法来检查调色板是否遵循类似色轮、单色、三色等色轮的配色方案?

is there a coding way to check whether a color palette follows the color schemes of a color wheel like Analogous, monochromatic, triadic etc..?

我渴望建立一个系统来判断我的调色板是否遵循色轮中的任何配色方案,即单色、类似色、互补色、分离互补色、三元色、正方形和矩形(或四色)。

我这几天一直在想这个问题,但一直想不出来。

关于从哪里开始,我没有太多线索,如果我能得到一些关于如何继续使用 python 的初步想法,请拜托。

我不是色彩理论家,如果 knowledge/experience 的人贡献了更专业的东西,我会很乐意删除我的建议。

我猜您想转换为 HSL/HSV 色彩空间,您可以使用 ImageMagickOpenCV 非常简单地完成。

  • 对于单色,您会查看色相通道(角度)并查看所有色相是否都在 10-15 度范围内。

  • 为了互补,您需要寻找相隔 180 度左右的 2 组色相角。

  • 对于三元组,3 组角相隔约 120 度。等等。更奇葩的方案我就不知道了

你可以像这样用 OpenCV 得到 HSV:

import cv2

# Open image as BGR
im = cv2.imread(XXX)

# Convert to HSV
HSV = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)

请记住,OpenCV 色调角度是常规值的一半,因此 0..360 范围适合无符号 8 位整数,如处理时为 0..180与 8 位图像。处理浮点数时范围是常规的0..360。


这是一个带有色轮的小例子,我使用 ImageMagick 将图像分成色相、饱和度和明度,然后在打开色相的情况下将通道并排布置左边,中间的饱和度和右边的值:

magick colorwheel.png -colorspace HSV -separate +append separated.png

输入图像

分离图像

希望您能看到 Hue 值围绕左侧面板中的色轮移动,Saturation 随着您移动而降低远离中心并且 Value 随着您径向向外移动而增加。

您可以将颜色选择器悬停在例如绿色调上,然后会看到它们都具有相似的 色调。所以,如果你正在寻找互补色。例如,将鼠标悬停在两者上,看看它们是否 Hue 相隔 180 度。