[python opencv 计算机视觉零基础到实战] 九、模糊

一、学习目标

  1. 了解什么是卷积
  2. 了解模糊的使用方法与应用

如有错误欢迎指出~

二、了解模糊的应用

上一篇:[python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充

2.1 了解卷积是什么

在本节中,卷积我们不过多的进行深入讲解,我本人对卷积也只是稍有理解,不敢过多的编写太深的内容。在OpenCV中的模糊操作中,模糊需要用到卷积,在此引入贾志刚老师对于OpenCV的基本卷积的讲解。
以下是一个基本卷积的图示,第一列是一维数组中每一个位置的值。其中111我们称为卷积核。通过卷积核与一维数组进行计算最终将会得到蓝最下面的蓝色方块内的值。第一位我们照着写下,蓝色区域为1,蓝色方块内的第二个值为2,是如何得到的呢?很简单,用卷积核的每一个数乘上淡青蓝色的内容,那就是11,21,15,随后将它们进行相加,除以卷积核的步长,也就是3。这是就可以写成(11+21+15)/3等于2,余数为2,我们只取整数部分。之后的计算也是如此,包括二维的数据进行计算也是根据一维的计算原理一致。

2.2 均值模糊

在OpenCV中均值模糊使用blur函数,blur函数一般使用可以接收2个参数,一个是src为输入的图像,一个是ksize为卷积核大小;卷积核大小可以给予一个矩阵,如上图所属的111是1行3列的卷积核,那么就可以写为(1,3)。模糊都可以去进行去噪操作,不同的模糊对于不同的噪点有不同的效果。均值模糊一般可以用在随机噪点的图片中,可以很好的去除噪点。

首先我们引入一张图片:

import cv2img = cv2.imread(r"C:\Users\Administrator\Desktop\2.jpg")
cv2.imshow("img", img)

随后使用blur均值模糊函数对图片进行降噪:

blur_img=cv2.blur(img,(2,24))#图片去噪

blur函数第一个参数是img,为我们即将要处理的图片,第二个参数是(2,24),表示创建一个2行24列的卷积核进行卷积。最后显示图片并且进行等待,完整代码如下:

import cv2img = cv2.imread(r"C:\Users\Administrator\Desktop\3.jpg")
cv2.imshow("img", img)
blur_img=cv2.blur(img,(2,24))#图片去噪
cv2.imshow("blur_img", blur_img)
cv2.waitKey (0)#等待关闭
cv2.destroyAllWindows()#destroy

我们可以从图片中看到,原图是存在一定的噪点,但是进行均值模糊后会变淡很多,但是图片会有一定模糊。

2.3 中值模糊

中值模糊使用medianBlur函数,medianBlur一般接收2个参数,一个是待处理的图片,还有一个是核的大小,规定为大于1的奇数,例如3、5、7…
现在我有一张有椒盐噪点的图片:

中值模糊对于该类型的图片进行降噪效果十分显著。由于大多数代码已经讲解过,在此不再赘述,直接贴上代码:

import cv2img = cv2.imread(r"C:\Users\Administrator\Desktop\2.jpg")
cv2.imshow("img", img)
median_blur_img=cv2.medianBlur(img,5)cv2.imshow("median_blur_img", median_blur_img)
cv2.waitKey (0)#等待关闭
cv2.destroyAllWindows()#destroy

以上代码中使用了medianBlur中值模糊方法,传入了照片,并且给予了核大小值5,该值越大,则越模糊。结果如下:

2.4 锐化

在OpenCV中我们可以自定义内核对图像进行卷积,内核也有几种不同标准的内容,可以给图像进行卷积后达到一些指定的效果。自定义对内核进行卷积使用filter2D函数。函数原型如下:

cv.filter2D(src, ddepth, kernel)

src为待处理的图像;ddepth一般使用为-1,表示与原图像具有相同的深度;kernel为卷积核,为单通道浮点矩阵;由于我们进行初步使用直接使用一般的卷积核,这个时候直接传入固定数据即可,所以再次并不进行深度说明。

进行锐化的卷积核为:

kernel=np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32)

传入至filter2D函数则为:

cv2.filter2D(blur_img, -1, kernel)

现在我们将一个受到均值模糊的图片使用filter2D函数进行锐化处理,完整代码如下:

import cv2
import numpy as npimg = cv2.imread(r"C:\Users\Administrator\Desktop\4.jpg")
cv2.imshow("img", img)
blur_img=cv2.blur(img,(1,6))#图片去噪
cv2.imshow("blur_img", blur_img)kernel=np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32)
dst = cv2.filter2D(blur_img, -1, kernel)
cv2.imshow("dst", dst)cv2.waitKey (0)#等待关闭
cv2.destroyAllWindows()#destroy

以上代码中blur_img,是均值模糊后的图片,我们将blur_img传入值filter2D函数中使用指定的卷积核进行锐化,最后得到dst图像数据。结果如下:
均值模糊:

锐化处理:

从图片的结果可以看出,进行均值模糊后,再进行锐化,该图片的编译将得到加深。

2.4 浮雕

矩阵:

kernel=np.array([[-2,-1,0],[-1,1,1],[0,1,2]],np.float32)


有点鬼畜,不要笑。

2.5 大纲

矩阵:

kernel=np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]],np.float32)

2.6 拉普拉斯算子

矩阵:

kernel=np.array([[0,1,0],[1,-4,1],[0,1,0]],np.float32)

2.7 分身原图

矩阵:

kernel=np.array([[0,0,0],[0,1,0],[0,0,0]],np.float32)

在这里插入图片描述
该系列文章首发于ebaina

三、总结

  1. 了解了卷积卷积的运算方式
  2. 了解多种模糊的使用方法
  3. 了解了中值模糊对于椒盐噪点有很好的去噪效果

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

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

相关文章

windbg的时间旅行实现对 C# 程序的终极调试!

一:什么是时间旅行 简而言之就是把程序的执行流拍成vlog,这样就可以对 vlog 快进或者倒退,还可以分享给别人做进一步的分析,是不是想都不敢想。很开心的是 windbg preview 版本中已经实现了,叫做 时间旅行调试 TTD&…

【神经网络】神经网络结构在命名实体识别(NER)中的应用

命名实体识别(Named Entity Recognition,NER)就是从一段自然语言文本中找出相关实体,并标注出其位置以及类型,如下图。它是NLP领域中一些复杂任务(例如关系抽取,信息检索等)的基础。…

[python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃

一、学习目标 了解高斯模糊的使用方法了解毛玻璃的图片效果添加了解如何自己做一个噪声图片 上一篇:[python opencv 计算机视觉零基础到实战] 九、模糊 如有错误欢迎指出~ 二、了解模糊与美颜 2.1 使用高斯模糊降噪 由于很多小伙伴反应抛开原理或理论讲解使用用法对于初学…

Android之自定义View实现带4圆角或者2圆角的效果

1 问题 实现任意view经过自定义带4圆角或者2圆角的效果 2 原理 1) 实现view 4圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行。 2) 实现view上2圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行。 安卓源码里面有这样的类 package and…

java trim()函数_Java - split()函数和trim()函数的使用方法

split()函数和trim()函数的使用方法本文地址: http://blog.csdn.net/caroline_wendy/article/details/24465141详细參考Java API: http://docs.oracle.com/javase/6/docs/api/java/lang/String.htmlsplit()函数是依据參数如",", "-", " "等, 切割…

分布式服务器集群架构方案思考

0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。 集群主要分为:高可用集群(High Availability Cluster),负载均衡集群(Load Balance Cluster&…

交互式 .Net 容器版

1背景介绍 在之前的文章 - 交互式 .Net 中已经介绍了什么是 交互式 .Net,文中是通过 Visual Studio Code 插件的方式实现 交互式 .Net 的。现在,我们将使用容器的方式实现 交互式 .Net。2镜像构建 1. DockerfileFROM mcr.microsoft.com/dotn…

Java 集合练习——3

创建Map集合,创建Emp对象,并将创建的Emp对象添加到集合中,并将id为005的对象从集合中移除 创建Emp类: package jihe;public class Emp {private String id;public String getId() {return id;}public void setId(String id) {this…

[python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容

一、学习目标 了解图片内容定位方法matchTemplate使用了解minMaxLoc方法使用 上一篇《[python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃》 如有错误欢迎指出~ 二、了解从一张图片中找到指定内容的方法 2.1 使用matchTemplate函数对图片中的指定内容进行查找 有…

Linq 实现 DataTable 行转列

前几天写了一篇sqlserver 行转列,http://www.cnblogs.com/li-peng/archive/2012/02/01/2334973.html 由于工作需要,要把查出来的DataTable实现 行转列, 正好这一阵子在用Linq 就做了一个行转列的小例 子 转换前的table: 转换后的table: 代码…

Android Studio之编译提示\app\src\main\res\values\colors.xml:1:1 Error:前言有不允许的内容

1 问题 Android Studio新建立的项目运行莫名其妙提示错误如下 app\src\main\res\values\colors.xml:1:1 Error:前言有不允许的内容 然后我把res目录下面的colors.xml文件打开看如下 <?xml version"1.0" encoding"utf-8"?> <resources>&l…

Hello Playwright:(3)基本概念

下面介绍一下 Playwright 中的基本概念&#xff1a;Headless 浏览器Playwright 需要特定版本的浏览器二进制文件才能运行。这些浏览器都支持 2 种 运行模式&#xff1a;Headless&#xff0c;无浏览器 UI&#xff0c;运行速度较快&#xff0c;常用于自动化运行Headed&#xff0c…

[python opencv 计算机视觉零基础到实战] 十二 直方图

一、学习目标 了解matplotlib绘图库的使用了解如何通过折线图或者直方图对图表进行绘制了解了通过图标对图片内容进行直观判断 如有错误欢迎指出~ 二、了解图像直方图及其应用 2.1 了解matplotlib库 在了解图像直方图前我们需要了解一个matplotlib库&#xff0c;matplotli…

shell中的数字

shell中的数字 author :headsen chen date :2017-10-18 15:01:42 个人原创&#xff0c;转载请注明作者&#xff0c;出处&#xff0c;否则依法追究法律责任 1,生成随机数&#xff08;范围&#xff1a;0-32767&#xff09;&#xff0c;用特殊变量&#xff1a;RANDOM 2&#xff…

serviceloader java_【java编程】ServiceLoader使用看这一篇就够了

转载:https://www.jianshu.com/p/7601ba434ff4想必大家多多少少听过spi&#xff0c;具体的解释我就不多说了。但是它具体是怎么实现的呢&#xff1f;它的原理是什么呢&#xff1f;下面我就围绕这两个问题来解释&#xff1a;实现: 其实具体的实现类就是java.util.ServiceLoader…

.NET7 Preview4 之OpenAPI swagger改进

在MiniAPI系列中&#xff0c;《.NET6之MiniAPI(十八)&#xff1a;OpenAPI swagger》介绍了swagger在MiniAPI框架中的使用&#xff0c;当时留下很多不足&#xff0c;随着.NET7 Preview4的推出&#xff0c;这方面得到了很大的改进&#xff0c;我还是使用“十八”这篇文章的案例。…

Swift - 自定义单元格实现微信聊天界面

1&#xff0c;下面是一个放微信聊天界面的消息展示列表&#xff0c;实现的功能有&#xff1a; &#xff08;1&#xff09;消息可以是文本消息也可以是图片消息&#xff08;2&#xff09;消息背景为气泡状图片&#xff0c;同时消息气泡可根据内容自适应大小&#xff08;3&#x…