且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用Python / PIL检测HSV颜色空间(来自RGB)的阈值

更新时间:2023-01-27 09:45:19

好的,这个 工作(修复了一些溢出错误):

Ok, this does work (fixed some overflow errors):

import numpy, Image
i = Image.open(fp).convert('RGB')
a = numpy.asarray(i, int)

R, G, B = a.T

m = numpy.min(a,2).T
M = numpy.max(a,2).T

C = M-m #chroma
Cmsk = C!=0

# Hue
H = numpy.zeros(R.shape, int)
mask = (M==R)&Cmsk
H[mask] = numpy.mod(60*(G-B)/C, 360)[mask]
mask = (M==G)&Cmsk
H[mask] = (60*(B-R)/C + 120)[mask]
mask = (M==B)&Cmsk
H[mask] = (60*(R-G)/C + 240)[mask]
H *= 255
H /= 360 # if you prefer, leave as 0-360, but don't convert to uint8

# Value
V = M

# Saturation
S = numpy.zeros(R.shape, int)
S[Cmsk] = ((255*C)/V)[Cmsk]

# H, S, and V are now defined as integers 0-255

它基于***对 HSV 的定义。随着时间的推移,我会仔细研究一下。肯定有加速和错误。如果您发现任何问题,请告诉我。欢呼。

It is based on the Wikipedia's definition of HSV. I'll look it over as I get more time. There are definitely speedups and maybe bugs. Please let me know if you find any. cheers.

结果:

从这个色轮开始:

starting with this colorwheel:

I得到以下结果:

Hue:

值:

饱和度: