1. 程式人生 > >numpy矩陣相減出現的負值自動轉正值的問題

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)