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

标签 python numpy opencv machine-learning convolution

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

Original Image

结果如下:

enter image description here

我已经尝试过重新编写代码、更改图像、更改模糊内核、打印以及亲自通过眼睛进行多次卷积等。

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。

关于python - 简单的 Python 模糊卷积核函数生成奇怪的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57210684/

相关文章:

python - 使用 scrapy-splash 选择依赖下拉菜单

Python:根据具有第 3 维索引的相应数组将 2D 数组拉伸(stretch)为 3D

python - x 上的对数

android - 在 Android Native Activity 中使用 OpenCV2.3.1 的问题

python - 如何在python中将视频转换为时空卷

php - 为openCV创建PHP扩展时出错

python - 有没有一种简单的方法可以优雅地关闭 python grpc 服务器?

python - 没有反向匹配 : Reverse for 'deleted' with no arguments not found. - Django

python - 在两个二维数组中查找匹配行的索引

python - PySide 文本编辑器