Python Opencv颜色范围直方图

时间:2015-05-19 14:16:47

标签: python opencv colors

我正在一个项目中工作,我希望从给定的图像中获取自定义直方图。

假设我想计算三种颜色的像素数:

  1. 浅棕色。
  2. 蓝。
  3. 红色。
  4. 我发现很容易计算出与混凝土颜色相匹配的像素,但我想给颜色一个阈值,这就是我的问题。

    我怎样才能做出能反映近淡棕色或近红色等的好门槛......

    感谢。

2 个答案:

答案 0 :(得分:1)

关于你的BINS

来自here

  

BINS:上面的直方图显示了每个像素值的像素数,即从0到255.即你需要256个值来显示上面的直方图。但是考虑一下,如果你不需要分别找到所有像素值的像素数,但像素值区间的像素数是多少?例如,你需要找到介于0到15之间,然后是16到31,......,240到255之间的像素数。你只需要16个值来表示直方图。这就是OpenCV Tutorials on histograms中给出的示例。

引用引用的示例显示在[1]

[1] - http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_calculation/histogram_calculation.html#histogram-calculation

这两个链接值得一读,但实际上你能做的就是为你想要的范围设置一些容器,比如浅棕色是1-15(我不知道实际值)然后你可以为你想要的颜色设定门槛。

答案 1 :(得分:0)

我找到了一个非常好的方法来解决我的问题:

  1. LAB colorspace是比较颜色的漂亮色彩空间。
  2. 方格公式的差异。
  3. 示例代码:

    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 最低的像素在感知上与比较颜色最相似。

    有了它,很容易根据我想要计算的颜色构建直方图。