13

我希望从彼此中减去 2 个灰色人脸以查看差异,但我遇到了一个问题,即减去例如 [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 (270,270) 减去后的负值face 和 nface 中每个点之间的差异?(所以不是 numpy.setdiff1d,因为它只返回 1 维而不是 270x270)

在职的

根据@ajcr 的回答,我做了以下操作(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)
4

2 回答 2

18

听起来dtype数组的 是uint8。所有数字都将被解释为 0-255 范围内的整数。这里,-2 等于 256 - 2,因此减法结果为 254。

您需要将数组重铸为dtype支持负整数的 a,例如int16像这样...

face = face.astype(np.int16)

...然后减去。

于 2014-10-31T15:31:02.113 回答
3

这是 numpy 数组中数据类型的问题。你里面有一个 uint8 ,它似乎环绕

看看 nfac.dtype 它将显示给你。您必须在计算操作之前对其进行转换。使用 numpy.ndarray.astype 对其进行转换或查看In-place type conversion of a NumPy array

于 2014-10-31T15:30:28.370 回答