OpenCV入门7——OpenCV中的滤波器(包括低通滤波与高通滤波,其中低通滤波用于降噪,而高通滤波用于边缘检测)

文章目录

  • 图像滤波
  • 卷积相关概念
    • 锚点
  • 实战图像卷积
    • Blur an image with a 2d convolution matrix
  • 方盒滤波与均值滤波
  • 高斯滤波
  • 中值滤波
  • 双边滤波
  • 高通滤波—索贝尔算子
  • 高通滤波—沙尔算子
  • 高通滤波—拉普拉斯算子
  • 边缘检测Canny

图像滤波

卷积核=滤波器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

卷积相关概念

在这里插入图片描述
在这里插入图片描述

锚点

锚点就是卷积核所对应的图像中间的点,比方说是3x3的卷积核,那对应的锚点可以是16
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实战图像卷积

低通滤波:低于某个阀值滤波可以通过
高通滤波:高于某个阀值滤波可以通过
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Blur an image with a 2d convolution matrix

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//10.jpg')kernel = np.ones((5, 5), np.float32) / 25
dst = cv2.filter2D(img, -1, kernel)cv2.imshow('dst', dst)
cv2.imshow('img', img)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

方盒滤波与均值滤波

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这两种滤波API功能基本一样,一般我们用blur这个
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('E://pic//10.jpg')# kernel = np.ones((5, 5), np.float32) / 25
# dst = cv2.filter2D(img, -1, kernel)
dst = cv2.blur(img, (5, 5))cv2.imshow('dst', dst)
cv2.imshow('img', img)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

高斯滤波

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./gaussian.png')# kernel = np.ones((5, 5), np.float32) / 25
# dst = cv2.filter2D(img, -1, kernel)
dst = cv2.GaussianBlur(img, (5, 5), sigmaX=1)cv2.imshow('dst', dst)
cv2.imshow('img', img)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

中值滤波

在这里插入图片描述
中值滤波的优点是对胡椒噪音效果明显
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./papper.png')# kernel = np.ones((5, 5), np.float32) / 25
# dst = cv2.filter2D(img, -1, kernel)
dst = cv2.medianBlur(img, 5)cv2.imshow('dst', dst)
cv2.imshow('img', img)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

双边滤波

可以进行美颜
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./bieber.jpeg')# kernel = np.ones((5, 5), np.float32) / 25
# dst = cv2.filter2D(img, -1, kernel)
# dst = cv2.medianBlur(img, 5)
dst = cv2.bilateralFilter(img, 7, 20, 50)cv2.imshow('dst', dst)
cv2.imshow('img', img)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

高通滤波—索贝尔算子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./chess.png')# 索贝尔算子y方向边缘
d1 = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
# 索贝尔算子x方向边缘
d2 = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)# dst = d1 + d2
dst = cv2.add(d1, d2)cv2.imshow('img', img)
cv2.imshow('d1', d1)
cv2.imshow('d2', d2)
cv2.imshow('dst', dst)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

高通滤波—沙尔算子

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./chess.png')# 索贝尔算子y方向边缘
# d1 = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)d1 = cv2.Scharr(img, cv2.CV_64F, 1, 0)
# 索贝尔算子x方向边缘
# d2 = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)d2 = cv2.Scharr(img, cv2.CV_64F, 0, 1)# dst = d1 + d2
dst = cv2.add(d1, d2)cv2.imshow('img', img)
cv2.imshow('d1', d1)
cv2.imshow('d2', d2)
cv2.imshow('dst', dst)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

高通滤波—拉普拉斯算子

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./chess.png')# 索贝尔算子y方向边缘
# d1 = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
# 沙尔算子
# d1 = cv2.Scharr(img, cv2.CV_64F, 1, 0)
# 索贝尔算子x方向边缘
# d2 = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
# 沙尔算子
# d2 = cv2.Scharr(img, cv2.CV_64F, 0, 1)# dst = d1 + d2
# dst = cv2.add(d1, d2)# 拉普拉斯
ldst = cv2.Laplacian(img, cv2.CV_64F, ksize=5)cv2.imshow('img', img)
# cv2.imshow('d1', d1)
# cv2.imshow('d2', d2)
cv2.imshow('dst', ldst)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

边缘检测Canny

在这里插入图片描述
超过最大值肯定是边缘,低于最小值肯定不是边缘,而介于最大值和最小值之间,如果和超出最大值A是连续的,则C也是边缘,而B就不是边缘
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./lena.png')
dst = cv2.Canny(img, 100, 200)cv2.imshow("img", img)
cv2.imshow("dst", dst)
key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/156540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解硬盘的接口、总线和协议

总线:总线是计算机系统中用于连接各个硬件组件的一种通信方式,它可以实现数据、地址和控制信号的传输。在服务器中,内部总线起着承载数据和控制信号的重要作用。总线在单位时间内能传输数据量称为带宽。分为SATA,SAS,P…

linux 系统调用流程分析

x86 1.系统调用 系统调用是用户空间程序与内核交互的主要机制。系统调用与普通函数调用不同,因为它调用的是内核里的代码。使用系统调用时,需要特殊指令以使处理器权限转换到内核态。另外,被调用的内核代码由系统调用号来标识,而…

上门维修安装派单系统小程序APP开发之会员级别设计深度解析

啄木鸟鲁班大师上门安装维修平台APP开发之VIP会员解析,在APP或者小程序里设置的会员叫VIP级别会员,系统一共分为4种会员,注册会员,正式会员,VIP金卡会员,VIP钻卡会员。注册用户是指注册了平台但是没有消费记…

预计2023年交付35万台,增速超400%!HUD硬核玩家强势崛起

随着HUD市场渗透率加速提升,其高速增长期已经来临。 W-HUD和AR-HUD在中国市场的萌芽导入期是在2020年前后,此前HUD市场不温不火,主要归因于以往W-HUD FOV较小,成像画面有限,显示内容简单且效果粗糙;而AR-H…

Linux下使用宏定义判断系统架构和系统类型

文章目录 查看编译器当前支持的宏定义查找指定的宏不同架构不同系统 附录-编译器内部常用的一些宏定义宏定义实际应用使用宏定义判断系统架构使用宏定义判断系统类型 一般情况下在linux下做C/C方面的开发不需要太关注系统架构,当然如果涉及到不同架构下的适配问题&a…

软考小记-软件工程

模块的控制范围包括模块本身及其所有的从属模块。模块的作用范围是指模块一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围.,原则上一个模块的作用范围应该在其控制范围之内,若没有,则可以将判定所在模块…

安装向量数据库milvus及其Attu

前置条件安装docker compose 在宿主机上创建文件目录 mkdir -p /home/sunyuhua/milvus/db mkdir -p /home/sunyuhua/milvus/conf mkdir -p /home/sunyuhua/milvus/etcd下载docker-compose.yml wget https://github.com/milvus-io/milvus/releases/download/v2.2.11/milvus-s…

OpenGL_Learn14(光照贴图)

1. 漫反射贴图 在光照场景中,它通常叫做一个漫反射贴图(Diffuse Map)(3D艺术家通常都这么叫它),它是一个表现了物体所有的漫反射颜色的纹理图像。 我们会将纹理储存为Material结构体中的一个sampler2D 。我们将之前定义的vec3漫反…

AI技术实力认证,宏电股份荣获2023年度AI天马“领军企业”

近日,由中国新一代人工智能发展战略研究院指导,深圳市人工智能产业协会主办,广东未来产业研究院承办的2023年度“AI天马”认定最终结果公布,宏电股份荣获AI天马“领军企业”奖项。 宏电股份基于20余年的技术沉淀,在工业…

基于猎食者算法优化概率神经网络PNN的分类预测 - 附代码

基于猎食者算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于猎食者算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于猎食者优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…

关于lenra你需要了解的

monorepo:项目代码管理方式,单个仓库中管理多个项目是一种设计思想 lenra:是一种工具,对于使用npm和git管理多软件包代码仓库的工作流程进行优化 使用这些工具的优点: 公共依赖只要安装一次,Monorepo 中…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大关键点分析

数字化时代银行网点厅堂营销需要抓住以下5大关键点: 1、精准识别客户:在数字化时代,银行网点厅堂营销的关键在于精准识别客户。通过利用大数据和人工智能技术,银行可以分析客户的行为和需求,从而更好地了解客户&#…

面试题:你怎么理解System.out.println() ?

文章目录 首先分析System源码out源码分析println分析拓展知识点 你如何理解System.out.println() ? 学了这么久的面向对象编程,那如何用一行代码体现呢? 如果你能自己读懂System.out.println(),就真正了解了Java面向对象编程的含义 面向对…

如何理解低代码开发工具?

目录 一、低代码平台是什么 1. 数据输入 2. 数据流转 3. 数据加工 4. 数据输出 (1)视图:单表的数据的简单展示 (2)看板:提供单表、多表数据的多种图表组合展示 二、低代码能力 ➪ 全栈可视化编程&#xff1…

大彻大悟,期末的大学生请码住!!

不装了,我摊牌了,这东西大学生太太太需要了啊! 就是这个 写作火火,只需要输入需求,一键生成,几秒就给我写出来一篇,不满意还可以重新写,关键每次内容都不一样,完全不怕…

Redis常用的八种场景

作为一名 Java后端人员,对 Redis肯定并不陌生,Redis作为一种内存数据库,以其速度之快在编程的舞台上纵横多年,那么,Redis到底适合哪些业务场景?今天就来聊一聊。 1. 缓存/数据库 缓存(Cache&am…

电压放大器实验可以研究哪些领域

电压放大器是一种电子电路,能够对输入信号进行放大,使得输出信号具有更大的幅度。在实验中,电压放大器可以应用于许多领域,从电子学到通信领域,都能够进行研究与实践。 在电子学领域,电压放大器实验可以用于…

算法---腐烂的橘子

题目 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格…

STM32在进行CAN总线多节点通信时,同时发数据会一直收不到某设备数据的问题及解决

CAN多设备通信收不到某设备数据的问题及解决 遇到的问题问题的发现CAN总线的一般冲突机制STM32中的CAN冲突机制 遇到的问题 问题的发现 最近在开发Canopen项目中,进行一主多从设备通信时,主站发送同步帧,两个从站往往只有帧ID优先级高的设备…