gpt4 book ai didi

python - 如何在不使用 for 循环的情况下迭代图像中的所有像素并将它们的 RGB 值与另一个 RGB 值进行比较?

转载 作者:行者123 更新时间:2023-12-01 07:46:39 25 4
gpt4 key购买 nike

所以,基本上我有一个包含 16 个 RGB 颜色值的数组,并且我必须计算输入图像中像素的 RGB 值与所有这 16 个颜色值之间的距离。距离较小的 RGB 值将是输出图像中的 RGB 值。

问题是:我使用嵌套的 for 循环来执行这些操作,而且速度非常慢。摘录如下:

for i in range (row):
for j in range (columns):
pixel = img[i, j]
for color in colorsarray:
dist.append(np.linalg.norm(pixel - color))
img[i,j] = colorsarray[dist.index(min(dist))]
dist.clear()

是否有一个 numpy 函数可以帮助我优化这个?

最佳答案

您可以通过广播数组来计算距离。

如果您的图像具有形状 (x,y,3) 并且调色板具有形状 (n,3),那么您可以将每个像素和每种颜色之间的距离计算为具有形状 (x,y,n) 的数组:

# distance[x,y,n] is the distance from pixel (x,y) to
# color n
distance = np.linalg.norm(
img[:,:,None] - colors[None,None,:], axis=3)

索引:表示“整个轴”,索引None表示“沿该轴广播值”。

然后您可以选择最接近的颜色索引:

# pal_img[x,y] is the index of the color closest to
# pixel (x,y)
pal_img = np.argmin(distance, axis=2)

最后,您可以转换回 RGB:

# rgb_img[x,y] is the RGB color closest to pixel (x,y)
rgb_img = colors[pal_img]

这表明您并不真正需要 NumPy 中的特殊函数。不幸的是,这可能有点难以理解。

关于python - 如何在不使用 for 循环的情况下迭代图像中的所有像素并将它们的 RGB 值与另一个 RGB 值进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56429486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com