首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【OpenCV (/逆)离散傅里叶变换】

【OpenCV (/逆)离散傅里叶变换】

作者头像
flos chen
发布2026-01-23 15:24:38
发布2026-01-23 15:24:38
590
举报

在 OpenCV 中,cv2.dftcv2.idft 分别用于执行图像的离散傅里叶变换(DFT)和逆离散傅里叶变换(IDFT)。这些变换在图像处理中非常有用,特别是在频率域分析、滤波和图像增强等方面。

1. cv2.dft - 离散傅里叶变换

cv2.dft 函数用于将图像从空间域转换到频率域。其基本语法如下:

代码语言:javascript
复制
cv2.dft(src, dst, flags, nonzeroRows)
  • src:输入图像,通常是单通道或双通道(实部和虚部)的浮点数图像。
  • dst:输出图像,与输入图像具有相同的大小和类型。
  • flags:变换标志,常用的有 cv2.DFT_COMPLEX_OUTPUT(输出复数结果)。
  • nonzeroRows:如果输入图像的前几行是非零的,可以指定这个参数来加速计算。通常设置为0。
示例:使用 cv2.dft 进行傅里叶变换
代码语言:javascript
复制
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图像并转换为灰度
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)

# 将图像转换为浮点数
f = np.float32(image)

# 进行傅里叶变换
dft = cv2.dft(f, flags=cv2.DFT_COMPLEX_OUTPUT)

# 将低频部分移动到图像中心
dft_shift = np.fft.fftshift(dft)

# 计算幅度谱
magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))

# 显示结果
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()
2. cv2.idft - 逆离散傅里叶变换

cv2.idft 函数用于将图像从频率域转换回空间域。其基本语法如下:

代码语言:javascript
复制
cv2.idft(src, dst, flags)
  • src:输入图像,通常是双通道(实部和虚部)的浮点数图像。
  • dst:输出图像,与输入图像具有相同的大小和类型。
  • flags:变换标志,常用的有 cv2.DFT_SCALE(缩放结果)和 cv2.DFT_REAL_OUTPUT(输出实部)。
示例:使用 cv2.idft 进行逆傅里叶变换
代码语言:javascript
复制
# 逆傅里叶变换
idft_shift = np.fft.ifftshift(dft_shift)
idft = cv2.idft(idft_shift)

# 获取实部并转换为8位图像
real_part = idft[:, :, 0]
real_part = cv2.normalize(real_part, None, 0, 255, cv2.NORM_MINMAX)
real_part = np.uint8(real_part)

# 显示结果
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(real_part, cmap='gray')
plt.title('Reconstructed Image'), plt.xticks([]), plt.yticks([])
plt.show()
总结
  • cv2.dft:将图像从空间域转换到频率域,输出复数结果。
  • cv2.idft:将图像从频率域转换回空间域,可以输出实部。

这些函数在图像处理中非常有用,特别是在进行频率域分析和滤波时。通过这些变换,可以实现图像的平滑、锐化、去噪等操作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. cv2.dft - 离散傅里叶变换
  • 示例:使用 cv2.dft 进行傅里叶变换
  • 2. cv2.idft - 逆离散傅里叶变换
  • 示例:使用 cv2.idft 进行逆傅里叶变换
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档