【发布时间】:2015-05-24 19:56:24
【问题描述】:
我正在从事一个项目,我想从给定的图像中获取自定义直方图。
假设我要统计三种颜色的像素数:
- 浅棕色。
- 蓝色。
- 红色。
我发现计算与具体颜色匹配的像素很容易,但我想给颜色一个阈值,这是我的问题。
我怎样才能做一个可以反映几乎浅棕色或几乎红色等的良好阈值...
谢谢。
【问题讨论】:
我正在从事一个项目,我想从给定的图像中获取自定义直方图。
假设我要统计三种颜色的像素数:
我发现计算与具体颜色匹配的像素很容易,但我想给颜色一个阈值,这是我的问题。
我怎样才能做一个可以反映几乎浅棕色或几乎红色等的良好阈值...
谢谢。
【问题讨论】:
这都是关于你的 BINS
来自here
BINS :上面的直方图显示了每个像素值的像素数,即从 0 到 255。即您需要 256 个值来显示上面的直方图。但是考虑一下,如果您不需要单独找到所有像素值的像素数,而是像素值区间内的像素数,该怎么办?例如,您需要找到介于 0 到 15、16 到 31、...、240 到 255 之间的像素数。您只需要 16 个值来表示直方图。这就是 OpenCV 直方图教程中给出的示例所示。
引用的例子如[1]所示
这两个链接都值得一读,但实际上你可以做的是为你想要的范围设置一些垃圾箱,比如浅棕色是 1-15(我不知道实际值)然后你可以您想要的颜色的阈值。
【讨论】:
我找到了一个非常好的方法来解决我的问题:
示例代码:
red_bgr = (0,0,255) # red pixel
pixel = (2,2,245) # pixel to compare
red_lab = cv2.cvtColor(pixel1, cv2.COLOR_BGR2LAB)
pixel_lab = cv2.cvtColor(pixel1, cv2.COLOR_BGR2LAB)
deltaE = sqrt(abs(red_lab[0] - pixel_lab[0])**2 +
abs(red_lab[1] - pixel_lab[1])**2 +
abs(red_lab[2] - pixel_lab[2])**2)
)
具有最低 deltaE 的像素在感知上与比较颜色最相似。
有了这个,可以很容易地根据我想要计算的颜色构建直方图。
【讨论】: