简单的Python模糊卷积核函数生成奇怪的图像

简单的Python模糊卷积核函数生成奇怪的图像,python,numpy,opencv,machine-learning,convolution,Python,Numpy,Opencv,Machine Learning,Convolution,我正在编写一个自定义函数,使用卷积核对图像应用模糊。但是,当我显示图像时,会出现一个奇怪的结果。在某些方面,这幅图像似乎是颠倒的,但我不知道为什么。以下是原始图像: 结果如下: 我已经尝试过重新编写代码、更改图像、更改模糊内核、打印并亲自用眼睛进行许多卷积,等等 import cv2 import numpy as np import matplotlib.pyplot as plt def showImage(image): plt.imshow(image, cmap='gra

我正在编写一个自定义函数,使用卷积核对图像应用模糊。但是,当我显示图像时,会出现一个奇怪的结果。在某些方面,这幅图像似乎是颠倒的,但我不知道为什么。以下是原始图像:

结果如下:

我已经尝试过重新编写代码、更改图像、更改模糊内核、打印并亲自用眼睛进行许多卷积,等等

import cv2
import numpy as np
import matplotlib.pyplot as plt

def 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()

# Load and view the image
image = cv2.imread("image_1_small.jpg", 0)
showImage(image)

# Apply Blur
image = gaussianBlur(image)
print(image)
# image = cv2.GaussianBlur(image, (5, 5), 0)
showImage(image)

预期结果应该看起来像原始图像一样模糊。

这是由溢出造成的。你的卷积计算错了。使用np.multiply代替np.matmul

这是由溢出引起的。你的卷积计算错了。使用np.multiply代替np.matmul

你有什么理由不使用吗?我想自己做。不过,我也可以这样做。建议避免使用循环,因为它们根本没有效率。有什么理由不使用它吗?我想自己做。不过,我也可以这样做。建议避免循环,因为它们根本没有效率。@BrandonFeder,这对我很有效。您是否用np.multiply替换了所有的np.matmul实例?好的。我把它们都换了。我错过了一个,它的工作!“谢谢!”布兰登费德,这对我很有效。您是否用np.multiply替换了所有的np.matmul实例?好的。我把它们都换了。我错过了一个,它的工作!谢谢