我正在一个项目中工作,我希望从给定的图像中获取自定义直方图。
假设我想计算三种颜色的像素数:
我发现很容易计算出与混凝土颜色相匹配的像素,但我想给颜色一个阈值,这就是我的问题。
我怎样才能做出能反映近淡棕色或近红色等的好门槛......
感谢。
答案 0 :(得分:1)
关于你的BINS
来自here
BINS:上面的直方图显示了每个像素值的像素数,即从0到255.即你需要256个值来显示上面的直方图。但是考虑一下,如果你不需要分别找到所有像素值的像素数,但像素值区间的像素数是多少?例如,你需要找到介于0到15之间,然后是16到31,......,240到255之间的像素数。你只需要16个值来表示直方图。这就是OpenCV Tutorials on histograms中给出的示例。
引用引用的示例显示在[1]
中这两个链接值得一读,但实际上你能做的就是为你想要的范围设置一些容器,比如浅棕色是1-15(我不知道实际值)然后你可以为你想要的颜色设定门槛。
答案 1 :(得分:0)
我找到了一个非常好的方法来解决我的问题:
示例代码:
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 最低的像素在感知上与比较颜色最相似。
有了它,很容易根据我想要计算的颜色构建直方图。