python 基于opencv实现高斯平滑


Posted in Python onDecember 18, 2020

假设一个列数为W,行数为H的高斯卷计算子gaussKernel,其中W,H均为奇数,描点位置在((H-1)/2 ,(W-1)/2),构建高斯卷积核的步骤如下

1.计算高斯矩阵

python 基于opencv实现高斯平滑

2.计算高斯矩阵的和

python 基于opencv实现高斯平滑

3.高斯矩阵除以其本身的和,也就是归一化

python 基于opencv实现高斯平滑

下面利用Python来实现构建高斯卷积算子

def getGaussKernel(sigma, H, W):
  r, c = np.mgrid[0:H:1, 0:W:1]
  r -= (H - 1) / 2
  c -= (W - 1) / 2
  gaussMatrix = np.exp(-0.5 * (np.power(r) + np.power(c)) / math.pow(sigma, 2))
  # 计算高斯矩阵的和
  sunGM = np.sum(gaussMatrix)
  # 归一化
  gaussKernel = gaussMatrix / sunGM
  return gaussKernel

高斯卷积核可以分离成一维水平方向上的高斯核和一维垂直方向上的高斯核,在OpenCV中给出了构建一维垂直方向上的高斯卷积核的函数:
Mat getGaussianKernel(int ksize, double sigma, in ktype = CV/_64F)

参数 释意
ksize 一维垂直方向上的高斯核行数,正奇数
sigma 标准差
ktype 返回值的数据类型为CV_32F或CV_64F,默认是CV_64F

下面通过Python代码来具体的实现图像的高斯平滑,我们首先会对图像水平方向进行卷积,然后再对垂直方向进行卷积,其中sigma代表高斯卷积核的标准差

def gaussBlur(image,sigma,H,W,_boundary = 'fill', _fillvalue = 0):
  #水平方向上的高斯卷积核
  gaussKenrnel_x = cv2.getGaussianKernel(sigma,W,cv2.CV_64F)
  #进行转置
  gaussKenrnel_x = np.transpose(gaussKenrnel_x)
  #图像矩阵与水平高斯核卷积
  gaussBlur_x = signal.convolve2d(image,gaussKenrnel_x,mode='same',boundary=_boundary,fillvalue=_fillvalue)
  #构建垂直方向上的卷积核
  gaussKenrnel_y = cv2.getGaussianKernel(sigma,H,cv2.CV_64F)
  #图像与垂直方向上的高斯核卷积核
  gaussBlur_xy = signal.convolve2d(gaussBlur_x,gaussKenrnel_y,mode='same',boundary= _boundary,fillvalue=_fillvalue)
  return gaussBlur_xy
if __name__ == "__main__":
  image = cv2.imread("../images/timg.jpg", cv2.IMREAD_GRAYSCALE)
  cv2.imshow("image",image)
  #高斯平滑
  blurImage = gaussBlur(image, 5, 400, 400, 'symm')
  #对bIurImage进行灰度级显示
  blurImage = np.round(blurImage)
  blurImage = blurImage.astype(np.uint8)
  cv2.imshow("GaussBlur", blurImage)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

运行截图:

python 基于opencv实现高斯平滑

以上就是python 基于opencv实现高斯平滑的详细内容,更多关于python 高斯平滑的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
Apr 19 Python
对命令行模式与python交互模式介绍
May 12 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
CentOS 7 安装python3.7.1的方法及注意事项
Nov 01 Python
python 用for循环实现1~n求和的实例
Feb 01 Python
python实现列表的排序方法分享
Jul 01 Python
python编写计算器功能
Oct 25 Python
pygame实现非图片按钮效果
Oct 29 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
基于Python的接口自动化读写excel文件的方法
Jan 15 Python
python爬取代理ip的示例
Dec 18 #Python
用Python 执行cmd命令
Dec 18 #Python
Django用内置方法实现简单搜索功能的方法
Dec 18 #Python
Django解决frame拒绝问题的方法
Dec 18 #Python
Django自带的用户验证系统实现
Dec 18 #Python
Django模板报TemplateDoesNotExist异常(亲测可行)
Dec 18 #Python
python 爬虫爬取京东ps4售卖情况
Dec 18 #Python
You might like
PHP Document 代码注释规范
2009/04/13 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
vue-cli3+typescript初体验小结
2019/02/28 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
[01:35]2018完美盛典章节片——共竞
2018/12/17 DOTA
python 控制语句
2011/11/03 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
parser.add_argument中的action使用
2020/04/20 Python
Django model class Meta原理解析
2020/11/14 Python
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
空字符串(“”)和null的区别
2012/11/13 面试题
毕业研究生的自我鉴定
2013/11/30 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
2014年母亲节寄语
2014/05/07 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
八达岭长城导游词
2015/01/30 职场文书
Python Pandas知识点之缺失值处理详解
2021/05/11 Python
Java spring单点登录系统
2021/09/04 Java/Android