傅里叶变换的高通滤波

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

img = cv.imread('E:/tuxiangku/cat.jpg')# 读入图片并灰度化
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

gray_f=np.float32(gray) ##float类型

h,w=gray.shape #获得长宽
a=int(h/2)# 计算图片中心位置
b=int(w/2)

dst=np.ones((h,w,2),np.uint8) #生成一个中间白两边黑的图片
dst[a-30:b-30,a+30:b+30]=0


dft=cv.dft(gray_f,flags=cv.DFT_COMPLEX_OUTPUT)#傅里叶变换
fshift = np.fft.fftshift(dft)#移动低频到中间


f_shift=fshift*dst #两图片位置信息相乘,获得中间白两边黑的低通滤波器
ishift = np.fft.ifftshift(f_shift)#逆移动位置
img_b=cv.idft(ishift)
magnitude_b=cv.magnitude(img_b[:,:,0],fshift[:,:,1])


plt.subplot(121)## 例如:plt.subplot(222)表示将整个图像窗口分为2行2列, 当前位置为2.
plt.imshow(gray_f,cmap='gray')
plt.title('picture')
plt.axis('off') #关闭坐标轴


plt.subplot(122)
plt.imshow(magnitude_b,cmap='gray')#cmap: 颜色图谱
plt.title('result')
plt.axis('off')
plt.show()

你可能感兴趣的:(opencv,计算机视觉,python)