numpy矩阵相减出现的负值自动转正值的问题

问题描述

今天在使用Numpy中的矩阵做相减操作时,出现了一些本应为负值的位置自动转换为了正值,
观察发现转换后的正值为原本的负值加上256得到,具体情况如下:
正常情况矩阵相减样例如下
>>> import numpy as np
>>> arr = np.array([98,100,103,161,192,210])
>>> brr = np.array([105,105,106,197,196,195])
>>> crr = arr-brr
>>> print(crr)
[ -7  -5  -3 -36  -4  15]
错误代码如下:
path = './image/Blur/blur5.png'
kernel_size = (21, 21);
sigma = 0;
img = cv2.imread(path)
img2gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img2blur = cv2.GaussianBlur(img2gray, kernel_size, sigma);
grayMat = np.matrix(img2gray)
blurMat = np.matrix(img2blur)
finalMat = blurMat-grayMat
print(grayMat[0,0:10])
print(blurMat[0,0:10])
print(finalMat[0,0:10])
得到的结果值如下:
[[173 171 169 171 174 179 181 182 180 180]]
[[172 172 172 173 173 174 174 173 171 168]]
[[255   1   3   2 255 251 249 247 247 244]]

解决方案

以上出现的矩阵相减得到的结果值自动转换的问题是因为直接通过grayMat = np.matrix(img2gray)
得到的dtype类型是unit8类型的,只需要在开始时设置为np.int32即可正常完成相减.即:
grayMat = np.matrix(img2gray ,dtype=np.float64)

猜你喜欢

转载自blog.csdn.net/Noonebirdyou/article/details/83547244