You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python OpenCV实现巴特沃斯低通滤波时过滤器无法生效如何解决

问题原因

你遇到的赋值失效问题完全是数据类型不匹配导致的:
你声明lpFilter_matrix时指定了np.uint8类型,这种无符号8位整数只能存储0255的整数值,而你计算得到的`lpFilter`所有取值都在01区间内,浮点数赋值给uint8数组时会被自动截断取整,所以所有值都会变成0。

修复方法

仅需要修改lpFilter_matrix的声明代码,将数据类型替换为支持浮点数的np.float32即可:

# 把原来的np.uint8改成np.float32
lpFilter_matrix = np.zeros((rows, cols, 2), np.float32)

修正后完整可运行代码

import cv2
import numpy as np
from matplotlib import pyplot as plt
image=cv2.imread(r"C:/Users/Admin/Pictures/eee.jpg",0)
image_float32=np.float32(image)
dft =cv2.dft(image_float32,flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift=np.fft.fftshift(dft)
magnitude_spectrum=np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))

rows, cols = image.shape
crow, ccol = rows//2 , cols//2   
r, c = np.mgrid[0:rows:1, 0:cols:1]
c -= crow
r -= ccol    

d = np.sqrt(np.power(r, 2.0) + np.power(c, 2.0))
# 这里修改了数据类型
lpFilter_matrix = np.zeros((rows, cols, 2), np.float32)
d0=10
n=2

lpFilter = 1.0 / (1 + np.power(d/d0, 2*n))
lpFilter_matrix[:, :, 0] = lpFilter
lpFilter_matrix[:, :, 1] = lpFilter           
fshift = dft_shift*lpFilter_matrix
f_ishift = np.fft.ifftshift(fshift)
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])
plt.figure(figsize=(14,9))
plt.subplot(121)
plt.imshow(image, cmap = 'gray')
plt.title('Input Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(img_back, cmap = 'gray')
plt.title('filtered Image')
plt.axis('off')
plt.show()

内容的提问来源于stack exchange,提问作者Aya Ibrahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:15:03