与3x3内核卷积不起作用

时间:2019-03-19 08:27:07

标签: python image-processing

我正在尝试将3x3滤镜内核应用于图像。代码被解释为没有错误,但是我没有图像显示吗? 我该怎么办?

def main():

    imgpath = "g.jpg"
    img = cv2.imread(imgpath, 1)
    import numpy as np
    img = np.array(img, dtype=np.uint8)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)


    k = np.array(np.ones((11, 11), np.float64))/121

    k = np.array(([2, 2, 2], [2, 3, 2], [2, 2, 2]), np.float64)

    print(k)


    output = cv2.filter2D(img, -1, k)

    plt.subplot(1, 2, 1)
    plt.imshow(img)
    plt.title('Original Image')

    plt.subplot(1, 2, 2)
    plt.imshow(output)
    plt.title('Filtered Image')

    plt.show()

if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:2)

除了缺少模块导入部分外,基本上,您的代码是正确的。

输出图像像白色一样空白,对不对? 根本原因是过滤后的值大于RGB范围0〜255。

应用滤波器时,应保持输出数据范围仍在0〜255之间。 就是

k = np.array(([2, 2, 2], [2, 3, 2], [2, 2, 2]), np.float64)
k = k / 19

Blurred image

因此,对于一个简单的平滑过滤器,它将是

k = np.array(([1, 1, 1], [1, 1, 1], [1, 1, 1]), np.float64)
k = k / 9

Sobel(水平)怎么样?

k = np.array(([1, 0, -1], [2, 0, -2], [1, 0, -1]), np.float64)

是的,将k保持为k。

Sobel sample

重新开始,建议您也粘贴您使用的导入部件。它将帮助其他人知道您的问题不是由缺少导入引起的:

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