2017-11-17 41 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