1

我正在研究的问题是,我想以相当合理的确定性检测图像是黑色还是大部分是黑色。我已经编写了用于获取颜色直方图的代码,下一步是编写一个函数,该函数将获取(r,g,b)元组并bool指示它是黑色还是接近它。这不是 100% 准确是可以的,但最好是误报。

def average_image_color(i):
    h = i.histogram()

    # split into red, green, blue
    r = h[0:256]
    g = h[256:256*2]
    b = h[256*2: 256*3]

    # perform the weighted average of each channel:
    # the *index* is the channel value, and the *value* is its weight
    return (
        sum( i*w for i, w in enumerate(r) ) / sum(r),
        sum( i*w for i, w in enumerate(g) ) / sum(g),
        sum( i*w for i, w in enumerate(b) ) / sum(b))

我有一组可以用作语料库的测试图像。最好的图书馆/方法是什么?

我希望训练的功能类似于

def is_black(r, g, b):
    if magic_says_black():
        return True
    return False
4

1 回答 1

1

由于您只关心亮度,因此将图像转换为灰度会更容易,因此您只需使用一个通道而不是三个通道。

然后你有很多选择:

  • 如果平均像素强度高于经验确定的阈值,则图像大部分为黑色;
  • 计算超过某个阈值的像素数
  • 如果您有大量示例图像,请使用灰度直方图训练分类器(例如 SVM)(这看起来确实像使用大锤敲碎核桃)。您会在scikit-learn 包中找到大量分类器 。
于 2013-05-17T00:15:49.180 回答