纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

OpenCV 傅里叶变换 OpenCV-Python使用cv2实现傅里叶变换

一天一篇Python库   2021-06-09 我要评论
想了解OpenCV-Python使用cv2实现傅里叶变换的相关内容吗一天一篇Python库在本文为您仔细讲解OpenCV 傅里叶变换的相关知识和一些Code实例欢迎阅读和指正我们先划重点:OpenCV,傅里叶变换,OpenCV,cv2傅里叶变换下面大家一起来学习吧

前言

在前一篇的博文中我们详细讲解了傅里叶变换的原理以及使用Numpy库实现傅里叶变换但是其实OpenCV有直接实现傅里叶变换的函数

在OpenCV中我们通过cv2.dft()来实现傅里叶变换使用cv2.idft()来实现逆傅里叶变换两个函数的定义如下:

cv2.dft(原始图像转换标识)

这里的原始图像必须是np.float32格式所以我们首先需要使用cv2.float32()函数将图像转换而转换标识的值通常为cv2.DFT_COMPLEX_OUTPUT用来输出一个复数阵列

经过cv2.dft()函数的变换后我们会得到原始图像的频谱信息此时零分量与Numpy库实现一样都不在中心位置这里我们还是需要使用numpy.fft.fftshift()函数将其移动到中间位置

需要特别注意的是函数cv2.dft()返回值是双通道的第1个通道是结果的实数部分第2个通道是结果的虚数部分使用numpy.fft.fftshift()函数处理后频谱图像还只是一个由实部和虚部构成的值要显示出来要使用到另一个函数cv2.magnitude()

该函数的定义如下:

cv2.magnitude(参数1参数2)

参数1:浮点型x坐标值也就是实部

参数2:浮点型y坐标值也就是虚部它必须和参数1具有相同的大小(size)

得到频谱图像的幅度之后还需要将幅度映射到灰度空间[0,255]内使其以灰度图像显示出来与前篇博文一样使用20*np.log(cv2.magnitude())

实现傅里叶变换

下面我们来通过上述OpenCV函数来实现傅里叶变换并显示其频谱信息

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

img = cv2.imread("4.jpg", 0)

dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
dftShift = np.fft.fftshift(dft)
result = 20 * np.log(cv2.magnitude(dftShift[:, :, 0], dftShift[:, :, 1]))


plt.subplot(121)
plt.imshow(img, cmap="gray")
plt.axis('off')
plt.subplot(122)
plt.imshow(result, cmap="gray")
plt.axis('off')
plt.show()

运行之后显示效果与前篇博文一样

效果

实现逆傅里叶变换

还是与上篇博文一样这里我们过滤图像的频谱信息这里我们过滤低频信息

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

img = cv2.imread("4.jpg", 0)

dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
dftShift = np.fft.fftshift(dft)
result = 20 * np.log(cv2.magnitude(dftShift[:, :, 0], dftShift[:, :, 1]))

rows,cols=img.shape
rows_half,cols_half=int(rows/2),int(cols/2)
mask=np.zeros((rows,cols,2),dtype=np.uint8)
mask[rows_half-30:rows_half+30,cols_half-30:cols_half+30]=1


#逆傅里叶变换
fShift=dftShift*mask
ishift=np.fft.ifftshift(fShift)
iimg=cv2.idft(ishift)
iimg=cv2.magnitude(iimg[:,:,0],iimg[:,:,1])


plt.subplot(121)
plt.imshow(img, cmap="gray")
plt.axis('off')
plt.subplot(122)
plt.imshow(iimg, cmap="gray")
plt.axis('off')
plt.show()

运行之后效果如下:

低频过滤

可以看到过滤低频信息后图像的边缘信息被消弱了


相关文章

猜您喜欢

  • idea maven TestNG源码 MAC下基于maven使用IDEA走读TestNG源码解析

    想了解MAC下基于maven使用IDEA走读TestNG源码解析的相关内容吗进击的HHH在本文为您仔细讲解idea maven TestNG源码的相关知识和一些Code实例欢迎阅读和指正我们先划重点:maven,TestNG源码,idea,maven,TestNG下面大家一起来学习吧..
  • Python库 Python的这些库,你知道多少?

    想了解Python的这些库,你知道多少?的相关内容吗肥学大师在本文为您仔细讲解Python库的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python常用库,python库下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式