如何使用python/opencv为图像制作圆形高通滤波器?

2024-06-01 20:36:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的图像中应用一个圆形高通滤波器,但我不知道是否有任何函数(在opencv,spicke,numpy,…)实现了它。所以,如果没有,我如何实现?之后,是否有可能知道所实现的高通滤波器的截止频率?例如,我想要200Hz。 下面是我的代码,只过滤低于200Hz的频率。但我没有察觉到图像有任何变化

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


img = cv2.imread('dente6.jpg',0)
plt.imshow(img,cmap='gray')

dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
fshift = np.fft.fftshift(dft)

magnitude_spectrum = 20*np.log(cv2.magnitude(fshift[:,:,0],fshift[:,:,1]))
plt.imshow(magnitude_spectrum,cmap='gray')

for i in range(fshift.shape[0]):
 for j in range(fshift.shape[1]):
     x = magnitude_spectrum[i][j]
     if x < 200:
         fshift[i][j] = 0

magnitude_spectrum = 20*np.log(cv2.magnitude(fshift[:,:,0],fshift[:,:,1]))
plt.imshow(magnitude_spectrum,cmap='gray')

ifshift= np.fft.ifftshift(fshift)
img_back = cv2.idft(ifshift)
img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])
plt.imshow(img_back,cmap='gray')

Tags: 图像importnumpyimgnpbackpltcv2