我在编写一个自定义函数,使用卷积核对图像进行模糊处理。然而,当我显示图像时,结果却很奇怪。某种程度上,图像似乎被反转了,但我不知道为什么。这里是原始图像:
这是结果:
我已经尝试了重写代码、更换图像、改变模糊核、打印并亲自逐个检查许多卷积等方法。
import cv2import numpy as npimport matplotlib.pyplot as pltdef showImage(image): plt.imshow(image, cmap='gray') plt.show()def gaussianBlur(image): tempImage = image.copy() tempImage = np.pad(tempImage, 1, "constant") showImage(tempImage) max = 0 i = 0 for x in range(1, len(image)-1): for y in range(1, len(image[0])-1): roi = image[x-1:x+2, y-1:y+2] kernel = np.array([ [0.0625, 0.125, 0.0625], [0.125, 0.25, 0.125], [0.0625, 0.125, 0.0625] ]) if np.matmul(roi, kernel).sum() > max: max = np.matmul(roi, kernel).sum() tempImage[x][y] = np.matmul(roi, kernel).sum() i += 1 print(np.matmul(roi, kernel).sum()) # if(i % 1000 == 0): # showImage(tempImage) divAmount = max / 255 for x in range(1, len(image)-1): for y in range(1, len(image[0])-1): tempImage[x][y] = tempImage[x][y] / divAmount return tempImage.tolist()# 加载并查看图像image = cv2.imread("image_1_small.jpg", 0)showImage(image)# 应用模糊image = gaussianBlur(image)print(image)# image = cv2.GaussianBlur(image, (5, 5), 0)showImage(image)
预期的结果应该是模糊处理后的原始图像。
回答:
这是由溢出引起的。你计算卷积的方式有误。请使用np.multiply替换np.matmul。