所以我有两个RGBA的PIL图像。我想要做的是找到RGB值相同且alpha为255的所有位置。它看起来像这样:
from PIL import Image
import numpy as np
img1 = np.array(Image.open(/path/to/img1).convert('RGBA'), float).reshape(32,32,4)
img2 = np.array(Image.open(/path/to/img2).convert('RGBA'), float).reshape(32,32,4)
# Checks to see if RGB of img1 == RGB of img2 in all locations that A=255
np.where((img1[:,:,:-1] == img2[:,:,:-1]) &\ # RGB check
(img1[:,:,3] == 255)) # Alpha check
但这导致operands could not be broadcast together with shapes (32,32,3) (32,32)
我并不认为我试图将它们一起播放,我只是想找到它们,我想这反过来在这个声明中广播它们。还有另一种方法可以做到这一点,还是一种不播放不等形状的方法?
答案 0 :(得分:3)
使用.all(axis=-1)
查找所有三个RGB值相等的位置:
np.where((img1[..., :-1] == img2[..., :-1]).all(axis=-1)
& (img1[..., 3] == 255))
作为mgilson points out,(img1[..., :-1] == img2[..., :-1])
的形状为(32, 32, 3)
。调用.all(axis-1)
会将最后一个轴减少为标量布尔值,所以
(img1[..., :-1] == img2[..., :-1]).all(axis=-1)
具有形状(32, 32)
。这匹配(img1[..., 3] == 255)
的形状,因此这些布尔数组可以与bitwise-and operator, &
组合。