这是我的代码:

from matplotlib.pyplot import imread
import matplotlib.pyplot as plt
from scipy.ndimage.filters import convolve


k3 = np.array([ [-1, -1, -1], [-1, 8, -1], [-1, -1, -1] ])
img = imread("lena.jpg")
channels = []
for channel in range(3):
    res = convolve(img[:,:,channel], k3)
    channels.append(res)

img = np.dstack((channels[0], channels[1], channels[2]))
plt.imshow(img)
plt.show()
k3过滤器假定是边缘检测过滤器。相反,我得到的怪异图像看起来像白噪声。

为什么?

这是输出:

python-3.x - 使用Python在图像上应用滤镜-LMLPHP

最佳答案

img可能是8位无符号整数。像使用Laplace mask 一样进行卷积,输出值可能会超出[0,255]的有效范围。例如,当给这样的图像分配-1时,写入的值将为254。这将导致输出,如问题所示。

使用此特定的过滤器,重要的是首先将图像转换为带符号的类型,例如16位带符号的整数或浮点类型。

img = img.astype(np.int16)

PS:请注意Laplace is not an edge detector!

关于python-3.x - 使用Python在图像上应用滤镜,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53890235/

10-16 19:31