opencv python 傅里叶变换的使用

yizhihongxing

OpenCV-Python傅里叶变换的使用

傅里叶变换是一种将信号从时域转换到频域的方法,可以用于图像处理中的滤波、去噪、边缘检测等。OpenCV-Python提了cv.dft()cv2.idft()函数来实现傅里叶变换和反变换。本文将详细讲解OpenCV-P傅里变换的使用,并提供两个示例。

傅里叶变换

在OpenCV-Python中,我们可以使用cv2.dft()函数来实现傅里叶变换。cv2.dft()函数接受一个输入图像和一个标志参数,该参数指定傅里叶变换的类型。下面是一个使用cv2.dft()函数实现傅里叶变换的例代码:

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

# 读取图像
img = cv2.imread('lena.jpg', 0)

# 傅里叶变换
dft = cv2.dft(np.float32(img), 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(img, 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()

上面的代码读取了一张灰度图像lena.jpg,然后使用cv2.dft()函数实现了傅里叶变换,并使用np.fft.fftshift()函数将频部分移动到中心,最后使用cv2.magnitude()函数取幅值。使用matplotlib库将原图和傅里叶变换后的图像显示出来。

反傅里叶变换

在OpenCVython中,我们可以使用cv2.idft()函数来实现反傅里叶变换。cv2.idft()函数接受一个输入图像和一个标志参数,该参数指定傅里叶变换的类型。下面是一个使用cv2.idft()函数实现反傅里叶变换示例代码:

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

# 读取图像
img = cv2.imread('lena.jpg', 0)

# 傅里叶变换
dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)

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

# 取幅值
magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))

# 反傅里叶变换
idft = cv2.idft(dft,=cv2.DFT_SCALE | cv2.DFT_COMPLEX_OUTPUT)

# 取幅值
idft_mag = cv2.magnitude(idft[:, :, 0], idft[:, :, 1])

# 显示原图和反傅里叶变换后的图像
plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(idft_mag, cmap='gray')
plt.title('IDFT Magnitude'), plt.xticks([]), plt.yticks([])
plt.show()

上面的代码读取了一张灰度图像lena.jpg,然后使用cv2.dft()函数实现了傅里叶变换,并使用np.fft.fftshift()将低频部分移动到中心,最后cv2.magnitude()函数取幅值。接着使用cv2.idft()函数实现反傅里叶变换,并使用cv2.magnitude()函数取幅值。使用matplotlib库将原图和反傅里变换后的图像显示出来。

示例一:使用傅里叶变换实现图像滤波

下面是一个使用傅里叶变换实现图像波的示例代码:

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

# 读取图像
img = cv2.imread('lena.jpg', 0)

# 傅里叶变换
dft = cv2.dft(np.float32(img), flags=cv.DFT_COMPLEX_OUTPUT)

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

# 创建一个掩膜
rows, cols = img.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols, 2), np.uint8)
mask[crow 30:crow + 30, ccol - 30:ccol + 30] = 1

# 应用掩膜
fshift = dft_shift * mask

# 将低频部分移回原位
f_ishift = np.fft.ifftshift(fshift# 反傅里叶变换
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])

# 显示原图和滤波后的图像
plt.subplot(121), plt.imshow(img, cmapgray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(img_back, cmap='gray')
plt.title('Result'), plt.xticks([]), plt.yticks([])
plt.show()

上面的代码读取了一张灰度图像lena.jpg,然后使用cv2.dft()函数实现了傅里叶变换,并使用np.fft.fftshift()函数将低频部分移动到中心。接着创建了一个掩膜,应用掩膜,将低频部分移回原位,最后使用cv2.idft()函数实现反傅里叶变换。使用matplotlib库将原图和滤波后的图像显示出来。

示例二:使用傅里叶变换实现图像去噪

下面是一个使用傅里叶变换实现图像去噪的示例代码:

import2
import numpy as np
from matplotlib import pyplot as plt

# 读取图像
img = cv2.imread('lena.jpg', 0)

# 添加高斯噪声
mean = 0
var = 100
sigma = var ** 0.5
gaussian = np.random.normal(mean, sigma, img.shape)
noisy_img = img + gaussian

# 傅里叶变换
dft = cv2.dft(np.float32(noisy_img), flags=cv2.DFT_COMPLEX_OUTPUT)

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

# 创建一个掩膜
rows, cols = noisy_img.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols, 2), np.uint8)
mask[crow - 30:crow + 30, ccol - 30:ccol + 30] = 1

#用掩膜
fshift = dft_shift * mask

# 将低频部分移回原位
f_ishift = np.fft.ifftshift(fshift)

# 反傅里叶变换
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])

# 显示原图和去噪后的图像
plt.subplot(121), plt.imshow(noisy_img, cmap='gray')
plt.title('Noisy Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(img_back, cmap='gray')
plt.title('Result'), plt.xticks([]), plt.yticks([])
plt.show()

上面的代码读取了一张灰度图像lena.jpg,然后添加了高斯噪声。接着使用cv2.dft()函数实现了傅里叶变换,并使用np.fft.fftshift()函数将低频部分移动到中心。接着创建了一个掩膜,应用掩膜,将低频分移回原位,最后使用cv2.idft()函数实现反傅里叶变换。使用matplotlib`库将原图和去噪后图像显示出来。

总结

本文详细讲解了OpenCV-Python傅里叶变换的使用,包括使用cv2.dft()函数实现傅里叶变换,使用cv2.idft()函数实现反傅里叶变换,以及使用傅里叶变换实现图像滤波和去噪。本文提供了两示例,分别演示了如何使用傅里叶变换实现图像滤波和去噪。掌握这些技巧可以帮助我们更好地处理图像处理中的滤波、去噪、边缘检测等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:opencv python 傅里叶变换的使用 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • win10安装python3.6的常见问题

    在Windows 10上安装Python 3.6可能会遇到一些常见问题。本文将详细讲解这些问题,并提供两个示例说明。 下载Python 3.6 首先,我们需要从Python官网下载Python 3.6的安装程序。可以使用以下链接下载Python 3.6的安装程序: https://www.python.org/downloads/release/python…

    python 2023年5月14日
    00
  • Anaconda入门使用总结

    Anaconda入门使用总结 Anaconda是一个用于数据科学和机器学习的开源发行版,它包含了Python、R语言、Jupyter Notebook等常用工具和库。本文将介绍如何安装和使用Anaconda,以及如何创建和管理虚拟环境。 安装Anaconda 首先,我们需要从Anaconda官网下载适合自己操作系统的安装包。下载完成后,双击安装包并按照提示进…

    python 2023年5月14日
    00
  • PyTorch模型转TensorRT是怎么实现的?

    PyTorch模型转TensorRT是一种将PyTorch模型优化为在NVIDIA GPU上高效运行的技术。下面将详细介绍该转换过程的完整攻略。 1.安装TensorRT 首先,需要安装TensorRT并配置好环境,具体的安装步骤可以参考TensorRT官网的文档(https://docs.nvidia.com/deeplearning/tensorrt/i…

    python 2023年5月13日
    00
  • Numpy对于NaN值的判断方法

    以下是Numpy对于NaN值的判断方法的攻略: Numpy对于NaN值的判断方法 在Numpy中,可以使用isnan()函数来判断数组中是否存在NaN值。以下是一些实现方法: 判断一维数组是否存在NaN值 可以使用isnan()函数来判断一维数组中是否存在NaN值。以下是一个示例: import numpy as np a = np.array([1, 2,…

    python 2023年5月14日
    00
  • python-OpenCV 实现将数组转换成灰度图和彩图

    1. Python-OpenCV实现将数组转换成灰度图和彩图 在Python中,我们可以使用OpenCV库来将数组转换成灰度图和彩图。在本攻略中,我们将介绍如何使用OpenCV库来实现这个功能。 2. 示例说明 2.1 将数组转换成灰度图 以下是一个示例代码,用于将数组转换成灰度图: import cv2 import numpy as np # 创建一个随…

    python 2023年5月14日
    00
  • python之np.argmax()及对axis=0或者1的理解

    Python之np.argmax()及对axis=0或者1的理解 在Python中,可以使用numpy库中的argmax()函数来获取数组中最大值的索引。但是,在使用argmax()函数时,需要理解axis参数的含义。本文将详细讲解argmax()函数及对axis=0或axis=1的理解,并提供两个示例说明。 1. np.argmax()函数 argmax(…

    python 2023年5月14日
    00
  • python实现mask矩阵示例(根据列表所给元素)

    以下是关于“Python实现mask矩阵示例(根据列表所给元素)”的完整攻略。 背景 在Python中,我们可以使用mask矩阵来过滤数组中的元素。mask矩阵是一个布尔类型的数组,它与原始数组具有相同的形状。mask矩阵中的每个元素都对应原始数组中的一个元素,如果mask矩阵中的元素为True,则表示原始数组中对应的元素应该被保留,否则应该被过滤掉。 本攻…

    python 2023年5月14日
    00
  • Python学习之if 条件判断语句

    Python学习之if条件判断语句 在Python中,if条件判断语句是一种常用的控制流语句,用于根据条件执行不同的代码块。本攻略将介绍Python中if条件判断语句的语法、用法和示例。 语法 Python中if条件判断语句的语法如下: if condition: statement1 else: statement2 其中,condition是一个布尔表达…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部