python opencv图像的高通滤波和低通滤波的示例代码

目录
  • 前言
  • 完整代码
    • 低通滤波
    • 高通滤波
  • 结果展示
    • 低通滤波
    • 高通滤波

前言

上一章我们说明了如何将图像机娘傅里叶变换,将图像由时域变换成频域,并将低频移动至图像中心。那么将低频移动中心后,就可以将图像的低频和高频分开,从而进行低通滤波和高通滤波的处理。

完整代码

低通滤波

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

# cv2.imread()在读取图像的时候,默认的是读取成RGB图像,cv2.IMREAD_GRAYSCALE将以灰度图的形式读取
img = cv2.imread('./moon.jpg', flags = cv2.IMREAD_GRAYSCALE)
# 将图像除以255是为了将图像向数字准换成fioat32数据
img1 = img/255
# 进行傅里叶变换,时域——>频域
dtf = cv2.dft(img1, flags = cv2.DFT_COMPLEX_OUTPUT)
# 移动低频波到中心位置
dft_shift = np.fft.fftshift(dtf)  

# 低通滤波
h,w = img.shape
# 图像中心点即低频波所在位置
h2, w2 = h//2, w//2
mask = np.zeros((h,w,2), dtype=np.uint8)
# 选取长宽为100的区域的低频部分为1,其余部分为0
mask[h2-50:h2+50,w2-50:w2+50] = 1  

# 低频部分保留,其余部分*0被滤掉
dft_shift*=mask
# 傅里叶逆变换,频域——>时域
ifft_shift2 = np.fft.ifftshift(dft_shift)
result = cv2.idft(ifft_shift2)

# 创建显示窗口,显示原图
plt.figure(figsize=(12,9))
plt.subplot(121)
plt.imshow(img, cmap = 'gray')

# 创建显示窗口,显示低通滤波后的图像
plt.subplot(122)
plt.imshow(result[:,:,0], cmap='gray')
plt.show()

高通滤波

高通滤波和低通滤波的主要区别在于,低通滤波是保留中心的低频波去除高频波,高通滤波是去除中心的低频波保留高频波。

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

# cv2.imread()在读取图像的时候,默认的是读取成RGB图像,cv2.IMREAD_GRAYSCALE将以灰度图的形式读取
img = cv2.imread('./moon.jpg', flags = cv2.IMREAD_GRAYSCALE)
# 将图像除以255是为了将图像向数字准换成fioat32数据
img1 = img/255
# 进行傅里叶变换,时域——>频域
dtf = cv2.dft(img1, flags = cv2.DFT_COMPLEX_OUTPUT)
# 移动低频波到中心位置
dft_shift = np.fft.fftshift(dtf)

# 高通滤波
h,w = img.shape
# 图像中心点即低频波所在位置
h2, w2 = h//2, w//2  # 中心点
# 选取长宽为100的区域的低频部分为0,其余高频部分为1
dft_shift[h2-5:h2+5,w2-5:w2+5] = 0
# 傅里叶逆变换,频域——>时域
ifft_shift2 = np.fft.ifftshift(dft_shift)
result = cv2.idft(ifft_shift2)

# 创建显示窗口,显示原图
plt.figure(figsize=(12,9))
plt.subplot(121)
plt.imshow(img, cmap = 'gray')

# 创建显示窗口,显示低通滤波后的图像
plt.subplot(122)
plt.imshow(result[:,:,0], cmap='gray')
plt.show()

结果展示

改变滤波区域的大小可以改变滤波的程度,可以修改如图所示的代码中的相关部分:

低通滤波

高通滤波

到此这篇关于python opencv图像的高通滤波和低通滤波的文章就介绍到这了,更多相关python opencv图像内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python+Opencv实现图像匹配功能(模板匹配)

    本文实例为大家分享了Python+Opencv实现图像匹配功能的具体代码,供大家参考,具体内容如下 1.原理 简单来说,模板匹配就是拿一个模板(图片)在目标图片上依次滑动,每次计算模板与模板下方的子图的相似度,最后就计算出了非常多的相似度: 如果只是单个目标的匹配,那只需要取相似度最大值所在的位置就可以得出匹配位置: 如果要匹配多个目标,那就设定一个阈值,就是说,只要相似度大于比如0.8,就认为是要匹配的目标. 1.1 相似度度量指标 差值平方和匹配 CV_TM_SQDIFF 标准化差值平方和匹

  • Python 深入了解opencv图像分割算法

    使用 OpenCV 函数 cv::filter2D 执行一些拉普拉斯滤波以进行图像锐化 使用 OpenCV 函数 cv::distanceTransform 以获得二值图像的派生(derived)表示,其中每个像素的值被替换为其到最近背景像素的距离 使用 OpenCV 函数 cv::watershed 将图像中的对象与背景隔离 加载源图像并检查它是否加载没有任何问题,然后显示它: # Load the image parser = argparse.ArgumentParser(descript

  • 理想高通滤波实现Python opencv示例

    理想高通滤波实现 python opencv import numpy as np import cv2 from matplotlib import pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus'] = False I = cv2.imread('capture3.png') cv2.imshow('original',I) (r,g,b) = cv2.spli

  • python opencv图像的高通滤波和低通滤波的示例代码

    目录 前言 完整代码 低通滤波 高通滤波 结果展示 低通滤波 高通滤波 前言 上一章我们说明了如何将图像机娘傅里叶变换,将图像由时域变换成频域,并将低频移动至图像中心.那么将低频移动中心后,就可以将图像的低频和高频分开,从而进行低通滤波和高通滤波的处理. 完整代码 低通滤波 import cv2 import numpy as np import matplotlib.pyplot as plt # cv2.imread()在读取图像的时候,默认的是读取成RGB图像,cv2.IMREAD_GRA

  • python OpenCV图像金字塔

    目录 1.图像金字塔理论基础 2.向下取样函数及使用 3.向上取样函数及使用 4.采样可逆性研究 5.拉普拉斯金字塔 6.图像轮廓介绍 轮廓近似 1.图像金字塔理论基础 图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效但概念简单的结构.一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合.其通过梯次向下采样获得,直到达到某个终止条件才停止采样.我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低.那我们为什么要做图像金字塔呢?这

  • python opencv 图像尺寸变换方法

    利用Python OpenCV中的 cv.Resize(源,目标,变换方法)就可以实现变换为想要的尺寸了 源文件:就不用说了 目标:你可以对图像进行倍数的放大和缩小 也可以直接的输入尺寸大小 变换的方法: CV_INTER_NN - 最近邻插值, CV_INTER_LINEAR - 双线性插值 (缺省使用) CV_INTER_AREA - 使用象素关系重采样.当图像缩小时候,该方法可以避免波纹出现.当图像放大时,类似于 CV_INTER_NN 方法.. CV_INTER_CUBIC - 立方插值

  • python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)

    图像边框的实现 图像边框设计的主要函数 cv.copyMakeBorder()--实现边框填充 主要参数如下: 参数一:源图像--如:读取的img 参数二--参数五分别是:上下左右边的宽度--单位:像素 参数六:边框类型: cv.BORDER_CONSTANT--cv.BORDER_REPLICATE--cv.BORDER_REFLECT--cv.BORDER_WRAP--cv.BORDER_REFLECT_101--cv.BORDER_TRANSPARENT--cv.BORDER_REFLEC

  • Python OpenCV 图像区域轮廓标记(框选各种小纸条)

    学在前面 上篇 OpenCV 博客原计划完成一个 识别银行卡号的项目,但是写的过程中发现,技术储备不足,我无法在下述图片中,提取出卡号区域,也就无法进行后续的识别了,再次意识到了自己技术还不达标,继续学习.完不成,就实现其它学习项目. 轮廓识别实战 先看一下最终实现的效果,针对一张图片(该图片前景色和背景色差异较大),进行轮廓标记. 图片基本处理 import cv2 as cv src = cv.imread("./demo.jpg") gray = cv.cvtColor(src,

  • Python OpenCV 图像平移的实现示例

    每次学习新东西的时候,橡皮擦都是去海量检索,然后找到适合自己理解的部分. 再将其拼凑成一个小的系统,争取对该内容有初步理解. 今天这 1 个小时,核心要学习的是图像的平移,在电脑上随便打开一张图片,实现移动都非常简单,但是在代码中,出现了一些新的概念. 检索 OpenCV 图像平移相关资料时,碰到的第一个新概念是就是 仿射变换. 每次看到这样子的数学名字,必然心中一凉,做为一个数学小白,又要瑟瑟发抖了. 百度一下,看看百科中是如何介绍的. 看过上图中的一些相关简介之后,对于这个概念也并没有太深刻

  • 详解python opencv图像混合算术运算

    目录 图片相加 cv2.add() 按位运算 图片相加 cv2.add() 要叠加两张图片,可以用 cv2.add() 函数,相加两幅图片的形状(高度 / 宽度 / 通道数)必须相同.         numpy中可以直接用res = img + img1相加,但这两者的结果并不相同(看下边代码):         add()两个图片进行加和,大于255的使用255计数.         numpy会对结果取256(相当于255+1)的模: import numpy as np import c

  • Python+OpenCV 图像边缘检测四种实现方法

    目录 1.Sobel算子 2.Schaar算子(更能体现细节) 3.Laplacian算子(基于零穿越的,二阶导数的0值点) 4.Canny边缘检测(被认为是最优的边缘检测算法) 总结 import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 设置兼容中文 plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = [

  • Python OpenCV图像颜色变换示例

    目录 给图像添加颜色 图像按位操作 图像的通道操作 给图像添加颜色 在使用OpenCV操作图像时,有时候需要给图像添加不同的颜色,以达到不同的风格效果.这里介绍的主要是opencv中的cv.applyColorMap()函数. 给图像应用颜色函数cv.applyColorMap(src, colormap, dst=None)src:表示传入的原图:colormap:颜色图类型(17种).可以单独使用,也可以以一个列表的形式批量使用. 以下图举例实现: 直接上代码: # -*-coding:ut

  • python OpenCV 图像通道数判断

    目录 前言 教程 1.读取/保存图片 1)imread和imwrite方法 2)imdecode和imencode方法 2.编码转换 1)BGR转RGB 2)BGR转GRAY 3.快速判断图像是否单通道灰度图 4.获取图像通道数 前言 OpenCV是图像处理常用的库,作为初学者,往往从图片的读取.保存.查询图片的信息开始,下面将分享Python下OpenCV的一些基本使用方法,掌握这些基本方法后,能够更好地与matplotlib.numpy等结合使用,完成相应的图像操作. 教程 1.读取/保存图

随机推荐