Numpy使用不同数组大小的地方

时间:2016-05-20 19:07:45

标签: python numpy

所以我有两个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) 我并不认为我试图将它们一起播放,我只是想找到它们,我想这反过来在这个声明中广播它们。还有另一种方法可以做到这一点,还是一种不播放不等形状的方法?

1 个答案:

答案 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, &组合。