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 np

img = 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 np

img = 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 np

img = 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 np

img = 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 np

img = 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 np

img = 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 np

img = 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 np

img = 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 np

img = 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()

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C进阶---动态内存管理

目录 一、为什么存在动态内存分配 1.1静动态内存分配区别: 1.2静态分配的优缺点 1.3动态分配优缺点 二、动态内存函数的介绍 2.1malloc和free 2.2calloc 2.3realloc 三、常见的动态内存错误 3.1对NULL指针的解引用操作 3.2 对动态开辟空间的越界…

selenium判断元素是否存在的方法

文章目录 快捷方法完整示例程序 快捷方法 selenium没有exist_xxx相关的方法,无法直接判断元素存在。但是锁定元素时使用的browser.find_elements(By.CSS_SELECTOR, "css元素")会返回一个列表list,如果不存在这个元素就会返回一个空列表。因此…

柯桥考级日语学校,日语听力如何拿满分

今天,来分析一下能力考听力中的五道听力题的题型和解题技巧。 首先在N1和N2中,听力题型是一样的。 第一大题「課題理解」 第二大题「ポイント理解」 第三大题「概要理解」 第四大题叫做「即時応答」 第五大题叫做「統合理解」 名字不同,考点和…

Flowable工作流基础篇

文章目录 一、Flowable介绍二、Flowable基础1.创建ProcessEngine2.部署流程定义3.启动流程实例4.查看任务5.完成任务6.流程的删除7.查看历史信息 三、Flowable流程设计器1.Eclipse Designer1.1 下载安装Eclipse1.2 安装Flowable插件1.3 创建项目1.4 创建流程图1.5 部署流程 2.F…

Java项目实战《苍穹外卖》 三、登录功能

测测你是什么人格吧,地址: MBTI 16种人格测试官网 系列文章目录 苍穹外卖是黑马程序员2023年的Java实战项目,作为业余练手用,需要源码或者课程的可以找我,无偿分享 Java项目实战《苍穹外卖》 一、项目概述Java项目实战…

远程桌面访问MATLAB 2018B,提示License Manger Error -103,终极解决方案

通过远程桌面方位Windows Server系统下的MATLAB2018B,报错License Manger Error -103,Crack文件夹下的dll文件已经替换,同时也已经输出了lic文件,但是仍然无法打开。但是在本地桌面安装就没有问题。初步怀疑MATLAB的License使用机…

tomcat (SCI)ServletContainerInitializer 的加载原理

问题:使用WebScoket的时候发现通过ServerEndpoint方式注册上去的url无法访问,报错404 经过排查发现在WsServerContainer这个类中的addEndpoint方法一直没有触发ServerEndpoint注解的扫描 通过该方法来源于StandardContext.startInternal()方法的调用如下…

共享内存的创建和映射过程

消息队列、共享内存、信号量的机制:它们在使用之前都要生成 key,然后通过 key 得到唯一的 id,并且都是通过 xxxget 函数。在内核里面,这三种进程间通信机制是使用统一的机制管理起来的,都叫 ipcxxx。为了维护这三种进程…

day29_Servlet

今日内容 零、 复习昨日 一、Servlet 零、 复习昨日 一、Servlet 1.1 Servlet介绍 javaweb开发,就是需要服务器接收前端发送的请求,以及请求中的数据,经过处理(jdbc操作),然后向浏览器做出响应. 我们要想在服务器中写java代码来接收请求,做出响应,我们的java代码就得遵循tomca…

端到端数据保护浅析

作为最重要的数据保护方式之一,NVMe端到端数据保护被众多企业用户所看重,它可以有效降低静默错误的发生,保护范围涵盖数据自Host端生成直至写入SSD NAND当中,以及从SSD NAND读取直至返回Host的全部流程。它使得数据不论是在SSD内部…

米哈游大数据云原生实践

云布道师 近年来,容器、微服务、Kubernetes 等各项云原生技术的日渐成熟,越来越多的公司开始选择拥抱云原生,并将企业应用部署运行在云原生之上。随着米哈游业务的高速发展,大数据离线数据存储量和计算任务量增长迅速&#xff0c…

Python之staticmethod:让你的代码更简洁高效

概要 在Python中,staticmethod是一种非常有用的装饰器,它可以将一个方法转换为静态方法,使得该方法可以通过类名或实例名直接调用,而不需要传入self参数。staticmethod的使用可以让代码更加简洁、高效,同时也可以提高…

如何分辨独享代理IP池?代理IP有独享的代理IP吗?

对于HTTP代理使用者而言,如果排除成本考虑,大家都更愿意是用独享IP,那在一众的HTTP代理厂商的产品中,我们要如何分辨什么样的才是独享IP呢?今天青果网络HTTP代理,就带大家一起来了解一下这其中的奥秘。 如何…

如何在AIX操作系统上修改Java环境变量

AIX操作系统是IBM的Unix操作系统,通常用于企业级应用和服务器环境。在AIX上配置Java环境变量是执行Java应用程序和开发Java代码的重要步骤。本文将详细介绍如何在AIX上修改Java环境变量,并提供具体示例来帮助你完成这个任务。 步骤1:确定Java…

SSM框架(二):AOP和事物

文章目录 一、AOP的介绍1.1 基本概念1.2 AOP入门1.3 AOP工作流程1.4 切入点表达式1.5 AOP的通知类型1.6 ProceedingJoinPoint1.7 AOP通知获取参数数据 二、事物2.1 基本介绍2.2 事物角色2.3 事物属性2.4 事物的传播行为 一、AOP的介绍 1.1 基本概念 1.2 AOP入门 导入坐标 <…

微信小程序开发学习——顺序、选择、循环、数学函数

1.条件语句 只需在js中写JavaScript的条件语句就行 math对象&#xff1a; 代码如下&#xff1a; <!--pages/tiaojian/tiaojian.wxml--> <view class"box"><view class"title">输入x&#xff0c;条件输出y</view><view><…

【FLink】水位线(Watermark)

目录 1、关于时间语义 1.1事件时间 1.2处理时间​编辑 2、什么是水位线 2.1 顺序流和乱序流 2.2乱序数据的处理 2.3 水位线的特性 3 、水位线的生成 3.1 生成水位线的总体原则 3.2 水位线生成策略 3.3 Flink内置水位线 3.3.1 有序流中内置水位线设置 3.4.2 断点式…

CANopen权威指南【CAN总线协议】

1这个总线定义是老外发明的。 想要使用&#xff0c;就必须按照协议去配置数据帧。 CIA301和cia402协议&#xff0c;实际就是寄存器地址上某一段的定义。 下载地址&#xff1a; CAN in Automation (CiA): Technical documents 注册下载也是非常快的。【没什么难度】 就是资…

数据结构之二叉树

前言&#xff1a;我们前面已经学习了数据结构的栈和队列&#xff0c;今天我们就来学习一下数据结构中的二叉树&#xff0c;那么作为二叉树我们就得先了解树的一些概念&#xff0c;还有二叉树一些特点。 树的概念&#xff1a; 树是一种非线性的数据结构&#xff0c;它是由n&…

Linux网络驱动

Linux 网络设备驱动结构 网络协议接口层向网络层协议提供统一的数据包收发接口&#xff0c;这一层使得上层协议独立于具体的设备网络设备接口层向协议接口层提供统一的用于描述具体网络设备属性和操作的结构体net_device&#xff0c;该结构体是设备驱动功能层中各函数的容器设备…