我有一个图像与4通道的rgba,但我只想计算每个像素的rgb的差异,并取代它与最接近的颜色在一个口述。
myMap = {
'a': ([255, 27, 255, 255]),
'b': ([255, 255, 27, 255]),
'c': ([255, 27, 27, 255]),
}
把这个作为我的阵列,
np.random.seed(seed=777)
s = np.random.randint(low=0, high = 255, size=(3, 4, 4))
print(s)
这就是我如何替换pix的,但是效率非常低,因为使用了3个循环。
其逻辑是循环遍历每个像素并计算与dict中每个值的距离,然后用dict中的值替换该特定像素的值。
运行该函数后,图像shd最多只包含3种颜色。
有没有更好的方法来实现我的愿望?
for i in range(s.shape[0]):
for j in range(s.shape[1]):
_min = math.inf
r, g, b, _ = s[i][j].tolist()
for color in myMap.values():
cr, cg, cb, ca = color
color_diff = math.sqrt((r - cr)**2 + (g - cg)**2 + (b - cb)**2)
if color_diff < _min:
_min = color_diff
s[i][j] = np.array([cr, cg, cb, ca])
print(s)
1条答案
按热度按时间qnakjoqk1#
你的问题有点模糊。你想提高性能还是可读性?
可通过使用附加维度和花哨的索引来提高可读性: