Я хочу вычесть 2 серыми человеческими лицами друг от друга, чтобы увидеть разницу, но я столкнулся с проблемой, которая вычитает, например, [4] - [6] дает [254] вместо [-2] (или разность: [2]).Вычитание пинтовских чисел без отрицательных чисел (4-6 дает 254)
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)
Оба не дают отрицательные числа, но вместо того, чтобы вычесть остаток после 0 из 255.
Выходной пример 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) с отрицательными значениями после вычитания или разницы между каждой точкой лица и nface? (Так что не numpy.setdiff1d, потому что это возвращает только один размер вместо 270x270)
РабочаяИз ответа @ajcr я сделал следующее (абс() для показа вычтена лицо):
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)
Невозможно реплицировать, если я создаю два массива numpy, заполненных значениями в диапазоне 0-255. Я могу просто выполнить 'a - b', и это даст мне отрицательные числа. – Ffisegydd
Ваш массив должен быть целым числом без знака - попробуйте, например. 'DTYPE = np.int16'. – jonrsharpe