我想从对方的两张灰色人脸中减去两张来看看区别,但我遇到了一个问题,即减去[4]-[6]会给出[254]而不是[-2](或差异[2])。

print(type(face)) #<type 'numpy.ndarray'>
print(face.shape) #(270, 270)
print(type(nface)) #<type 'numpy.ndarray'>
print(nface.shape) #(270, 270)

#This is what I want to do:
sface = face - self.nface #or
sface = np.subtract(face, self.nface)

两者都不给出负数,而是从255中减去0后的余数。
sface输出示例:
[[  8 255   8 ...,   0 252   3]
 [ 24  18  14 ..., 255 254 254]
 [ 12  12  12 ...,   0   2 254]
 ...,
 [245 245 251 ..., 160 163 176]
 [249 249 252 ..., 157 163 172]
 [253 251 247 ..., 155 159 173]]

我的问题:
如何让sface成为numpy.ndarray(270270),减去后的负值或faces和nface中每个点之间的差异?(所以不是numpy.setdiff1d,因为它只返回1维而不是270x270)
工作
从@ajcr i的答案中,我做了以下操作(abs()显示减去的面):
face_16 = face.astype(np.int16)
nface_16 = nface.astype(np.int16)
sface_16 = np.subtract(face_16, nface_16)
sface_16 = abs(sface_16)
sface = sface_16.astype(np.int8)

最佳答案

听起来数组的dtypeuint8。所有数字将被解释为0-255范围内的整数。这里,-2等于256-2,因此减法的结果是254。
您需要将数组重铸到支持负整数的dtype中,例如int16这样…

face = face.astype(np.int16)

…然后减去。

10-06 03:15