有很多关于通过使用 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 > 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("<"0x0408ED68处所有numpy.ndarray对象的内置方法">", dtype=object)
有什么建议吗? 谢谢。
最佳答案
你的 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) 您需要使用括号才能使该表达式正常工作。
关于python - 图像中的 numpy 元素比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47360625/