opencv python 傅里叶变换的使用

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日

相关文章

  • numpy之多维数组的创建全过程

    Numpy是Python中一个非常强大的数学库,它提供了许多高效的数学函数和工具,特别是对于数组和矩阵的处理。本攻略详细讲解Numpy中多维数组的创建过程,包括多维数组的创建、索引和切片、数组运算等。 多维数组的创建 使用Numpy,我们可以创建各种类型多数组。下面是一些示例: import numpy as np # 创建一个包含3个列表的二维数组 arr…

    python 2023年5月13日
    00
  • python多进程读图提取特征存npy

    以下是关于“Python多进程读图提取特征存npy”的完整攻略。 背景 在机器学习和深度学习中,通常需要对大量的图像进行特征提取。为了提高特征提取效率,使用多进程技术。本攻略将介绍如何使用Python多进程读取图像、提取特征并将结果存为npy文件。 步骤 步一:安装必要的库 在开始之前,需要安装必要的库。以下是示例: pip install numpy op…

    python 2023年5月14日
    00
  • Python实现两种稀疏矩阵的最小二乘法

    在Python中,稀疏矩阵是一种特殊的矩阵,其中大部分元素为零。在进行最小二乘法时,稀疏矩阵的处理需要特殊的技巧。本文将介绍Python实现两种稀疏矩阵的最小二乘法,并提供两个示例。 稀疏矩阵的最小二乘法 在Python中,可以使用SciPy库中的lsqr()函数实现稀疏矩阵的最小二乘法。lsqr()函数可以处理稀疏矩阵,并返回最小二乘解。在使用lsqr()…

    python 2023年5月14日
    00
  • Python的多维空数组赋值方法

    在Python中,可以使用numpy库来创建和操作多维数组。以下是Python的多维空数组赋值方法的完整攻略,包括创建多维空数组的方法、多维空数组的赋值方法以及两个示例说明: 创建多维空数组的方法 可以使用numpy库中的zeros()函数或empty()函数来创建多维空数组。zeros()函数创建的数组中的元素都是0,而empty()函数创建的数组中的元素…

    python 2023年5月14日
    00
  • python numpy库np.percentile用法说明

    以下是关于“python numpy库np.percentile用法说明”的完整攻略。 背景 在numpy库中,我们可以使用np.percentile()函数来计算数组中的百分位数。本攻略将介绍如使用np.percentile()函数,并提供两个示例来演示如何使用np.percentile()函数计算数组中的百位数。 np.percentile()函数 np…

    python 2023年5月14日
    00
  • 感知器基础原理及python实现过程详解

    以下是关于“感知器基础原理及Python实现过程详解”的完整攻略。 背景 感知器是一种二元线性分类器,它可以将输入数据分为两个类别。本攻略将介绍感知器基础原理及Python实现过程。 感知器基础原理 感知器是一种二元线性分类器,它可以将输入分为两个类别。感知器的基本原理是,将输入数据乘以权重,然后加偏置,最后使用激活函数将结果转换为输出。知器的训练过程是通过…

    python 2023年5月14日
    00
  • Python判断列表是否已排序的各种方法及其性能分析

    Python判断列表是否已排序的各种方法及其性能分析 在Python中,判断一个列表是否已排序是一个常见的问题。本文将介绍Python中判断列表是否排序的各种方法,并对它们性能进行分析。 方法一:使用sorted函数 使用Python内置的sorted函数可以判断一个列表是否排序。sorted函数会返回一个新的已排序的列表,如果原列表和新列表相等,则原列表已…

    python 2023年5月14日
    00
  • Numpy数组转置的实现

    Numpy数组转置是指将数组的行和列互换,可以使用transpose()函数实现。本文将详细讲解Numpy数组转置的实现方法,包括transpose()函数的用法、转置后数组的特点、以及两个示例。 transpose()函数的用法 在Numpy中,可以使用transpose()函数对数组进行转置。transpose()函数的用法如下: import nump…

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