【问题标题】:Python Opencv Color range histogramPython Opencv 颜色范围直方图
【发布时间】:2015-05-24 19:56:24
【问题描述】:

我正在从事一个项目,我想从给定的图像中获取自定义直方图。

假设我要统计三种颜色的像素数:

  1. 浅棕色。
  2. 蓝色。
  3. 红色。

我发现计算与具体颜色匹配的像素很容易,但我想给颜色一个阈值,这是我的问题。

我怎样才能做一个可以反映几乎浅棕色或几乎红色等的良好阈值...

谢谢。

【问题讨论】:

    标签: python opencv colors


    【解决方案1】:

    这都是关于你的 BINS

    来自here

    BINS :上面的直方图显示了每个像素值的像素数,即从 0 到 255。即您需要 256 个值来显示上面的直方图。但是考虑一下,如果您不需要单独找到所有像素值的像素数,而是像素值区间内的像素数,该怎么办?例如,您需要找到介于 0 到 15、16 到 31、...、240 到 255 之间的像素数。您只需要 16 个值来表示直方图。这就是 OpenCV 直方图教程中给出的示例所示。

    引用的例子如[1]所示

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

    这两个链接都值得一读,但实际上你可以做的是为你想要的范围设置一些垃圾箱,比如浅棕色是 1-15(我不知道实际值)然后你可以您想要的颜色的阈值。

    【讨论】:

    • 感谢您的回答 GPPK,我发现您的链接非常有用,但我的问题在于颜色范围,灰度图像很容易说从 10 到 20 强度 Color1 从 20 到 30 颜色2 等等,但是 rgb 颜色呢?我真的不知道如何为给定颜色应用阈值。
    【解决方案2】:

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

    1. LAB colorspace 是比较颜色的好色彩空间。
    2. 平方差公式。

    示例代码:

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

    有了这个,可以很容易地根据我想要计算的颜色构建直方图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 2016-11-05
      • 2017-04-18
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      相关资源
      最近更新 更多