关于opencv:Python,RGB颜色比较

Python, RGB color comparisons

我有一个来自OpenCV图像的像素,它的RGB格式是[R,G,B]。我想运行一个测试,这样如果我发现颜色比[150150150]深,我就停止一个for循环。

这就是我目前为止所拥有的:

1
2
3
4
5
6
7
def test():
    for l in range(y, y+h):
        for d in range(x, x+w):
            print(image[l,d][0])
            if image[l,d] <= [150,150,150]:
                return;
            image[l,d] = [0,0,0]

但是不起作用。有什么想法吗?


由于python中的opencv图像表示为numpy数组,因此每个像素值也将是numpy数组。这意味着比较操作将被向量化,并返回一个布尔值数组,例如

1
2
>>> image[l,d] <= [150,150,150]
array([ True,  True,  True], dtype=bool)

现在,您要检查是否满足所有项对的条件。这就是numpy.all发挥作用的地方。

1
2
>>> np.all(image[l,d] <= [150,150,150])
True

实际上,numpy数组有一个成员方法all(),它也做同样的事情。

1
2
>>> (image[l,d] <= [150,150,150]).all()
True