图像的平滑与滤波

平滑滤波是低频增强的空间域滤波技术,是图像模糊、消除噪声。

一、2D滤波器cv2.filter2D()

对于2D图像可以进行低通或者高通滤波操作,低通滤波(LPF)有利于去噪声,模糊图像,高通(HPF)有利于找到图像边界。

import cv2
import numpy as np
img = cv2.imread('dog.jpg', 0)
kernel = np.ones((5, 5), np.float32)/25
dst = cv2.filter2D(img, -1, kernel)
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

二、均值滤波

Opencv中有一个专门的平均滤波模板——归一化卷积模板,所有的滤波模板都是使卷积框覆盖区域所有像素点与模板相乘后得到的值作为中心像素的值。OpenCV中均值模板可以用cv2.blur()和cv2.boxFilter。

import numpy as np
import cv2
img = cv2.imread('dog.jpg', 0)
blur = cv2.blur(img, (3, 5)) # 模板大小3x5
box = cv2.boxFilter(img, -1, (3, 5))
cv2.imshow('img', img)
cv2.imshow('blur', blur)
cv2.imshow('box', box)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、高斯滤波

模板中的数值将会中间的数值最大,往两边走越来越小,构造一个小的高斯包,这样可以减少原始图像信息的丢失。

在OpenCV实现的函数为cv2.GaussianBlur()。对于高斯模板,我们需要制定的是高斯核的高和宽(奇数),沿x与y方向的标准差(如果只给x,y=x,如果都给0,那么函数会自己计算)。高斯 核可以有效的去除图像的高斯噪声。当然也可以自己构造高斯核,相关函数为:cv2.GaussianKernel()。

import numpy as np
import cv2
img = cv2.imread('dog.jpg', 0)
# 在图像中加入噪声
for i in range(2000):
_x = np.random.randint(0, img.shape[0])
_y = np.random.randint(0, img.shape[1])
img[_x, _y] = 255
# (5,5)表示卷积模板的大小,0表示的是沿x与y方向上的标准差
blur = cv2.GaussianBlur(img, (5, 5), 0)
cv2.imshow('img', img)
cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、中值滤波

中值滤波模板就是用卷积框中像素的中值代替中心值,达到去噪声的目的,尤其是椒盐噪声,

import numpy as np
import cv2
img = cv2.imread('dog.jpg', 0)
# 在图像中加入噪声
for i in range(2000):
_x = np.random.randint(0, img.shape[0])
_y = np.random.randint(0, img.shape[1])
img[_x, _y] = 255
blur = cv2.medianBlur(img, 5)
cv2.imshow('img', img)
cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

五、双边滤波

双边滤波是一种可以保证边界清晰地去噪滤波器,之所以可以达到此去噪效果,是因为滤波器由两个函数构:一个函数是由几何空间距离决定滤波器系数,另一个由像素差决定滤波器系数,既考虑了图像的空间关系,也考虑图像的灰度关系。双边滤波同时使用了空间高斯权重和灰度相似性高斯权重,确保了边界不会被模糊。

import numpy as np
import cv2
img = cv2.imread('dog.jpg', 0)
# 在图像中加入噪声
for i in range(2000):
_x = np.random.randint(0, img.shape[0])
_y = np.random.randint(0, img.shape[1])
img[_x, _y] = 255
# 9:表示的是滤波领域直径,后面两个:空间高斯函数标准差、灰度值相似性高斯函数标准差
blur = cv2.bilateralFilter(img, 9, 80, 80)
cv2.imshow('img', img)
cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

第十五节、OpenCV学习(四)图像平滑与滤波的更多相关文章

  1. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  2. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  3. 风炫安全web安全学习第三十五节课 文件下载和文件读取漏洞

    风炫安全web安全学习第三十五节课 文件下载和文件读取漏洞 0x03 任意文件下载漏洞 一些网站由于业务需求,往往需要提供文件下载功能,但若对用户下载的文件不做限制,则恶意用户就能够下载任意敏感文件, ...

  4. 风炫安全WEB安全学习第二十五节课 利用XSS键盘记录

    风炫安全WEB安全学习第二十五节课 利用XSS键盘记录 XSS键盘记录 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源.所以xyz.com下的js脚本采用a ...

  5. centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课

    centos  Linux系统日常管理2  tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...

  6. 大白话5分钟带你走进人工智能-第十五节L1和L2正则几何解释和Ridge,Lasso,Elastic Net回归

    第十五节L1和L2正则几何解释和Ridge,Lasso,Elastic Net回归 上一节中我们讲解了L1和L2正则的概念,知道了L1和L2都会使不重要的维度权重下降得多,重要的维度权重下降得少,引入 ...

  7. 第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现,回填数据以及错误提示html

    第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现 1,配置登录路由 from django.conf.urls import url, include # 导入dja ...

  8. 第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表

    第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表.课程机构表.讲师表 创建名称为app_organization的课 ...

  9. 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询

    第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...

  10. 第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

    第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行 ...

随机推荐

  1. 第二章 Python基本图形绘制

    2.1 深入理解Python语言 Python语言是通用语言 Python语言是脚本语言 Python语言是开源语言 Python语言是跨平台语言 Python语言是多模型语言 Python的特点与优 ...

  2. JS 设计模式四 -- 模块模式

    概念 模块模式的思路 就是 就是单例模式添加私有属性和私有方法,减少全局变量的使用. 简单的代码结构: var singleMode = (function(){ // 创建私有变量 var priv ...

  3. svg-sprite使用

    chainWebpack(config) { config.module .rule('svg') .exclude.add(path.resolve(__dirname,'src/assets/ic ...

  4. Spring自动注入之@Autowired、@Resource、@Inject

    相同点: 三者都支持对spring bean的自动注入 不同点: ①Autowired按照类型进行注入( Bean bean = applicationContext.getBean(Bean.cla ...

  5. Python——内置函数

    一.min函数 取当前字符串的最小字符串 s1 = min(strs) 二.max函数 取当前字符串的最大字符串 s1 = max(strs) 三.enumerate函数 函数用于将一个可遍历的数据对 ...

  6. Laravel数据库迁移

    Laravel的数据迁移功能很好用,并且可以带来一系列好处.通过几条简单的 artisan 命令,就可以顺利上手,没有复杂的地方 注意:该系列命令对数据库非常危险,请准备一个单独的数据库作为配套练习, ...

  7. 【UOJ453】【集训队作业2018】围绕着我们的圆环 线性基 DP

    题目大意 有一个 \(n\times k\) 的 01矩阵 \(C\),求有多少个 \(n\times m\) 的矩阵 \(A\) 和 \(m\times k\) 的矩阵 \(B\),满足 \(A\t ...

  8. bzoj 3196 && luogu 3380 JoyOI 1730 二逼平衡树 (线段树套Treap)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3196 题面; 3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Se ...

  9. bzoj1444[Jsoi2009]有趣的游戏[AC自动机]

    题面 bzoj 我要向师父学习善待每一只数据结构 考虑成环,那么高斯消元 然鹅这道题太小了 所以直接转移矩阵自乘就好啦 终点不向外连边 有一条向自己的,概率为一的自环来作为结尾 对于其他店 若有边\( ...

  10. jira,Confluence 的JVM内存优化

    个人喜好,可能不是很适合大众 JIRA 修改setenv.sh,调整JVM为4096m [root@jira_confluence ~]# cd /app/atlassian/jira/bin/ [r ...