python - 图像中的 numpy 元素比较

标签 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 > 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/

相关文章:

qt - 带有 QT Creator 构建错误的 OpenCV

python - Python 中的动态时间扭曲,如何内存可变矩阵

python - Django Oracle App 提供 ORA-03113 和 ORA-03135

python - 相似代码之间 numpy 的巨大速度差异

python - 有没有办法填补图像中两个部分之间的空白?

c++ - 如何以最快的方法删除那些指定的标签组件

c++ - 使用 OpenCV 和 Qt 显示图像的奇怪行为

python - 在 numpy 中构造此数组的有效方法?

python - 没有名为 ijson 的模块

python - 在 numpy 中快速找到对称对