这是我的代码:
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
过滤器假定是边缘检测过滤器。相反,我得到的怪异图像看起来像白噪声。为什么?
这是输出:
最佳答案
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/