第八章:直方图和傅里叶变换 4-高通和低通滤波

import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('lena.jpg',0)
img_float32=np.float32(img)#输入图像先转换成32格式
dft=cv2.dft(img_float32,flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift=np.fft.fftshift(dft)#将低频的值拉到中心

rows,cols=img.shape#中心点位置 再做个掩码 我们需要低频部分,因为图像低频都在中心部分,所以我们用掩码,中心白,其他黑色
crow,ccol=int(rows/2),int(cols/2)

#低通滤波
mask=np.zeros((rows,ccol,2),np.uint8)
print(mask.shape)
#创造一个60*60像素点大小的滤波器,也就是说中心点 +-30像素点
mask[crow-30:crow+30,ccol-30:ccol+30]=1

#IDFT
fshift=mask*dft_shift
#用掩码×
f_shift=np.fft.ifftshift(fshift)#然后把图像进行还原到原来的位置
img_back=cv2.idft(f_shift)#进行逆操作
img_back=cv2.magnitude(img_back[:,:,0],img_back[:,:,1])

plt.subplot(1,2,1),plt.imshow(img,cmap='gray')
plt.title('Imput Image'),plt.xticks([]),plt.yticks([])
plt.subplot(1,2,2),plt.imshow(img_back,cmap='gray')
plt.title(' Result'),plt.xticks([]),plt.yticks([])
plt.show()

#高通滤波器
mask=np.ones((rows,ccol,2),np.uint8)
print(mask.shape)
#创造一个60*60像素点大小的滤波器,也就是说中心点 +-30像素点
mask[crow-30:crow+30,ccol-30:ccol+30]=0

#IDFT
fshift=mask*dft_shift
#用掩码×
f_shift=np.fft.ifftshift(fshift)#然后把图像进行还原到原来的位置
img_back=cv2.idft(f_shift)#进行逆操作
img_back=cv2.magnitude(img_back[:,:,0],img_back[:,:,1])

plt.subplot(1,2,1),plt.imshow(img,cmap='gray')
plt.title('Imput Image'),plt.xticks([]),plt.yticks([])
plt.subplot(1,2,2),plt.imshow(img_back,cmap='gray')
plt.title(' Result'),plt.xticks([]),plt.yticks([])
plt.show()

你可能感兴趣的:(OpenCV图像处理,opencv,计算机视觉)