有许多答案与使用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)
有什么建议吗? 感谢。
答案 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才能正常工作。