2017-11-17 118 views
2

有很多答案与使用numpy避免在python中的蛮力RGB opencv图像循环有关。我查了很多,但似乎没有完全回答我的需求:图像中的numpy元素明智的比较

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

# 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> 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' 对象没有属性 '形状'

w = np.asarray(white) 

获取:阵列( “<” 内置的方法的所有numpy.ndarray对象在0x0408ED68“>”,dtype = object)

有什么建议吗? 谢谢。

回答

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来表达这个表达。

+0

很好,它马上工作,谢谢! – dpetrini