Python+opencv学习记录6:模糊操作
文章目录
- 1.模糊操作基本原理
- 1.1.均值模糊
- 1.2.中值模糊
- 1.3.自定义模糊
- 2.相对应的代码
- 2.1.均值模糊
- 2.2.中值模糊
- 2.3.自定义模糊
- 完整代码
1.模糊操作基本原理
图像在采集、传输的过程中,因为人为或者系统的因素难免会产生噪声。这时候就需要对图像进行预处理降低噪声。图像模糊降噪的数学原理是图像的卷积操作。
模糊操作:基于离散卷积,定义好每个卷积核,不同卷积核得到不同的卷积效果,模糊是卷积的一种表现形式。
1.1.均值模糊
均值滤波是典型的线性滤波算法,模糊是卷积的一种表象,所有的滤波模板都是使卷积框覆盖区域所有像素点与模板相乘后得到的值作为中心像素的值,比如一个3*3的模板可以用如下表示:
1.2.中值模糊
中值滤波模板就是用卷积框中像素的中值代替中心值,达到去噪声的目的。该模板一般用于去除椒盐噪声, 前面的滤波器都是用计算得到的一个新值来取代中心像素的值,而中值滤波是用中心像素周围(也可以使他本身)的值来取代他,卷积核的大小也是个奇数。
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
1.3.自定义模糊
滤波函数的使用需要一个核模板,对图像的滤波操作过程为:将核模板放在图像的一个像素A上,求与之对应的图像上的每个像素点的和,核不同,得到的结果不同,而滤波的使用核心也是对于这个核模板的使用,需要注意的是,该滤波函数是单通道运算的,也就是说对于彩色图像的滤波,需要将彩色图像的各个通道提取出来,对各个通道分别滤波才行。
2.相对应的代码
2.1.均值模糊
代码如下:
def blur_demo(image): # 均值模糊dst = cv.blur(image, (5, 5)) # 最常用cv.imshow("blur_demo", dst)
原图为:
经过均值模糊后:
可以看到雪女姐姐被明显地模糊了,要想改变模糊深度,可以改变blur里面的第二个参数,同时可以横向或者纵向地改变模糊方向。
2.2.中值模糊
代码如下:
def median_blur_demo(image): # 中值模糊dst = cv.medianBlur(image, 5)cv.imshow("median_blur_demo", dst)
原图为:
可以看出原图中含有很多椒盐噪声,则我们可以通过中值模糊去除这些椒盐噪声。
这时,莱娜周围的椒盐噪声大部分被去除掉了。
2.3.自定义模糊
自定义模糊时,我们会用到filter2D这个API,这个API用途比较广泛,用于图像模糊时,可以使用如下代码:
def custom_blur_demo(image): # 自定义模糊kernel = np.ones([5, 5], np.float32) / 25"""声明二维数组5*5,初始化1,保证值不溢出,除以数组大小,实现中值模糊,自定义卷积核的算子上述生成的5*5核模板其实就是一个均值滤波。,当我们是/25就是中值滤波,归一化处理 """dst = cv.filter2D(image, -1, kernel=kernel)cv.imshow("custom_blur_demo", dst)
原图为:
经过模糊后:
不仅可以模糊,我们还可以锐化图像,代码如下:
def custom_blur_demo(image): # 自定义模糊kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32) # 图像锐化dst = cv.filter2D(image, -1, kernel=kernel)cv.imshow("custom_blur_demo", dst)
经过锐化后的图像为:
此时的雪女姐姐变得有点魔幻了,反正这就是那种效果了。
完整代码
import cv2 as cv # 导入opencv模块
import numpy as np # 导入数学函数库def blur_demo(image): # 均值模糊# dst = cv.blur(image, (1, 5)) # 一行五列,垂直方向# dst = cv.blur(image, (5, 1)) # 五行一列,水平方向dst = cv.blur(image, (5, 5)) # 最常用cv.imshow("blur_demo", dst)def median_blur_demo(image): # 中值模糊dst = cv.medianBlur(image, 5)cv.imshow("median_blur_demo", dst)def custom_blur_demo(image): # 自定义模糊# kernel = np.ones([5, 5], np.float32) / 25"""声明二维数组5*5,初始化1,保证值不溢出,除以数组大小,实现中值模糊,自定义卷积核的算子上述生成的5*5核模板其实就是一个均值滤波。,当我们是/25就是中值滤波,归一化处理 """kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32) # 图像锐化dst = cv.filter2D(image, -1, kernel=kernel)cv.imshow("custom_blur_demo", dst)print("------------hello python!------------")src = cv.imread("D:/opencv3/image/snow girl3.png")
cv.namedWindow("input_image", cv.WINDOW_AUTOSIZE)
cv.imshow("input_image", src)
# blur_demo(src)
# median_blur_demo(src)
custom_blur_demo(src)cv.waitKey(0)
cv.destroyAllWindows() # 释放所有窗口
Python+opencv学习记录6:模糊操作相关推荐
- Python+opencv学习记录3:色彩空间
文章目录 1.色彩空间的介绍 1.1.什么是色彩空间 1.2.常见的色彩空间 1.2.1.RGB 1.2.2.HSV 1.2.3.HSI 1.2.4.YCrCb 1.2.5.YUV 1.3.相应的AP ...
- Python+opencv学习记录8:边缘保留滤波(EPF)
文章目录 1.高斯双边模糊 1.1原理 1.2代码解析 2.均值迁移模糊 2.1.原理 2.2.代码解析 完整代码 1.高斯双边模糊 1.1原理 前文提到的高斯模糊只考虑了像素空间的分布,而没有考虑差 ...
- opencv学习—简单车牌识别操作(python)
opencv学习-简单车牌识别操作(python) 目录 opencv学习-简单车牌识别操作(python) 利用opencv进行车牌识别的详细流程如下: 1.车牌检测 2.分割车牌号并进行识别 3. ...
- python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化
本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_hi ...
- Python+OpenCV学习(17)---摄像机标定
Python+OpenCV学习(17)---摄像机标定 原文:http://blog.csdn.net/firemicrocosm/article/details/48594897 利用python学 ...
- python做直方图-python OpenCV学习笔记实现二维直方图
本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...
- 基于c++的opencv学习记录
大纲 学习B站opencv快速入门30讲 课程链接:001 - 图像读取与显示_哔哩哔哩_bilibili 说明:课程所有的头文件放在最后面,所有的demo也在后面有总结!主函数的话改一个qd.就可以 ...
- python使用opencv查找轮廓_Python+opencv学习记录20:轮廓发现,Pythonopencv
1.轮廓发现 轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果. 1.1发现轮廓 在此步骤中我们会使用到findContours这个API,其原型为: ...
- 模糊处理(下)--高斯模糊,双边模糊以及实现一个简单的磨皮美颜效果(opencv学习记录--4)
文章目录 1.高斯模糊 1.什么是高斯模糊 2.opencv提供的API 2.双边模糊 1.什么是双边模糊 2.opencv的API 3.磨皮美颜效果的实现 1.实现过程 2.主要代码 3.效果 参考 ...
最新文章
- 如何在sqlite3连接中创建并调用自定义函数
- win10禁止dpi缩放在哪_Win10最新DPI缩放技术怎么设置?
- Oracle Database 10g:删除表
- 【分享】WeX5的正确打开方式(1)
- 初学SpringMVC,使用MVC进行文件上传
- SubSonic中RecordBaseT.Load(IDataReader dataReader)与LoadAndCloseReader(IDataReader dataReader)的使用区别...
- 键盘流的逆袭- Idea 中使用 VIM mode 提高生成效率
- AD20学习笔记3---PCB封装库的创建方法及现有封装调用
- 3d打印 开源_公开地图以实现可持续性,在农场进行3D打印以及更多开源新闻
- Linux下使用源码安装出现的坑
- nutch 1.5 solr 4.0 warmup
- 北斗三号频点_解码北斗三号
- 简单好用的钉钉群消息助手
- 软件测试包括哪些内容
- 2020网站/APP/Webshell在线查毒 电脑软件查毒大全
- SkeyeLive同屏直播库库功能介绍和接口说明与调用
- 歌评-《Rex Incognito 尘世闲游》-陈致逸
- 2014年3月CCF软考试题
- storyboard(故事版)新手教程 图文详解 4.把约束拉成属性 在代码文件里进行修改
- C++基础之 函数(function)