【opencv学习】【傅里叶变换】【高通滤波器和低通滤波器】

本文探讨了如何使用OpenCV进行图像的傅立叶变换(DFT),实现低通和高通滤波,通过实际操作展示了滤波效果对图像细节和模糊度的影响。
import cv2
import numpy as np
from matplotlib import pyplot as plt


# 展示图像,封装成函数
def cv_show_image(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)  # 等待时间,单位是毫秒,0代表任意键终止
    cv2.destroyAllWindows()

# 高频:图像灰度变化剧烈的部分,一般是边界点
# 低频:图像像素变化变化缓慢的部分

# 高通滤波:只保留高频成分,会使得图像细节增强
# 低通滤波:只保留低频成分,会使得图像变得模糊

# 1. cv2.dft(img, cv2.DFT_COMPLEX_OUTPUT) 进行傅里叶变化
# 参数说明: img表示输入的图片, cv2.DFT_COMPLEX_OUTPUT表示进行傅里叶变化的方法
#
# 2. np.fft.fftshift(img)  将图像中的低频部分移动到图像的中心
# 参数说明:img表示输入的图片
#
# 3. cv2.magnitude(x, y) 将sqrt(x^2 + y^2) 计算矩阵维度的平方根
# 参数说明:需要进行x和y平方的数
#
# 4.np.fft.ifftshift(img) # 进图像的低频和高频部分移动到图像原来的位置
# 参数说明:img表示输入的图片
#
# 5.cv2.idft(img) # 进行傅里叶的逆变化
# 参数说明:img表示经过傅里叶变化后的图片


# =============================================================================
# 图像的DFT
# =============================================================================

img = cv2.imread('images/naruto.jpg', cv2.IMREAD_GRAYSCALE)  # 读取灰度图,DFT是对一个通道计算的
img_float32 = np.float32(img)  # 转成浮点数的,方便DFT计算

# 进行DFT计算
# 但是结果是双通道的,有实部和虚部,无法直接展示,需要转换成图像格式(像素值是0~255)才能展示
dft = cv2.dft(img_float32, flags=cv2.DFT_COMPLEX_OUTPUT)
print(dft.shape)
dft_shift = np.fft.fftshift(dft)  
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值