图像中的numpy元素比较

时间:2017-11-17 23:11:54

标签: python numpy opencv

有许多答案与使用numpy在python中避免暴力RGB opencv图像循环有关。我查了很多,但似乎没有人完全回答我的需求:

给定一个图像,我需要按像素比较并根据结果创建一个掩码。是这样的:

# image contains a jpg regular image
data = np.asarray(image)

# Separate each channel
blue, green, red = data.T

print(blue.shape)
#(1024, 1024)

到目前为止一切顺利。

我需要这张图片的“白色”面具,如下所示:

- >如果其red_value> 1,则像素为白色。 80 AND red_value-green_value> 20 AND red_value-blue_value> 20

所以经过研究我得出了这个:

white = ((red > 80).all and (red-green > 20).all and (red-blue > 20).all)

但是在这个操作之后我无法读取白色值。

我尝试过很多东西:

print(white.shape)

获取:AttributeError:'builtin_function_or_method'对象没有属性'shape'

w = np.asarray(white)

获取:array(“<”内置方法所有numpy.ndarray对象位于0x0408ED68“>”,dtype = object)

有什么建议吗? 感谢。

1 个答案:

答案 0 :(得分:3)

你的rgb表达式中有一些问题应该通过这个例子清除:

import numpy as np
r, g, b = [np.random.rand(5,5) for i in range(3)]

w = (r>.5) & (b>.5) & (g>.5)  # change your "white = ..." to look similar to this

更明确一点:1)当你想进行元素比较时,不要使用all; 2)and通常不会使用numpy数组执行您想要的操作,而是使用&; 3)您需要使用该表达式的parens才能正常工作。