【发布时间】:2021-10-24 06:06:03
【问题描述】:
我在尝试检查 python 元组是否在一维 numpy 数组中时遇到了一些麻烦。我正在研究一个循环,它将记录图像中存在的所有颜色并将它们存储到一个数组中。使用普通列表效果很好,但图像非常大,我认为 NumPy 数组会加快循环,因为它需要几分钟才能完成循环。
代码如下:
from PIL import Image
import numpy as np
img = Image.open("bg.jpg").convert("RGB")
pixels = img.load()
colors = np.array([])
for h in range(img.size[1]):
for w in range(img.size[0]):
if pixels[w,h] not in colors:
colors = np.append(colors, pixels[w,h])
else:
continue
当我运行它时,我收到以下错误:
DeprecationWarning: elementwise comparison failed; this will raise an error in the future.
if pixels[w,h] in colors:
提前致谢,如果您知道更快的方法,请告诉我。
【问题讨论】:
-
使用 numpy 数组通常不会加速循环。 numpy 的优势在于矢量化。
pixels的形状是什么?是3D吗?高度和宽度以及三个颜色通道?你想要什么?图像中独特颜色的列表? 如何独一无二?您想考虑将(255, 255, 255)与(255, 255, 253)不同吗?你想如何存储你的颜色?作为元组?还是作为 3D 数组? -
@ddejhon 存储的每种颜色都是唯一的,所以是的,(255、255、255)将不同于(255、255、253)。颜色模式为
RGB,颜色将存储为元组,但存储在数组/列表中。该数组显然是二维的,每个维度有 4 个元素。 -
等等,你想要每个像素的颜色的二维数组吗?您不仅想要图像中的独特颜色,还想要它们的位置? 4个元素是什么? R、G、B 和...?
-
你能加一个Minimal Reproducible Example吗?
-
@ddejhon 抱歉,我的意思是 3 个元素。是的,一个包含 RGB 值的 3 个元素的二维数组。我遇到的问题是检查像素颜色(元组)是否在数组中,但是如果我按照上面显示的方式进行操作,则会出现错误。所以我的问题再次是,我如何检查一个元组是否在一个一维的 NumPy 数组中?
标签: python arrays numpy tuples python-imaging-library