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 变量类型及命名规则介绍
Jun 08 Python
使用python解析xml成对应的html示例分享
Apr 02 Python
Django数据库操作的实例(增删改查)
Sep 04 Python
python实现简单聊天应用 python群聊和点对点均实现
Sep 14 Python
解决python大批量读写.doc文件的问题
May 08 Python
python 批量解压压缩文件的实例代码
Jun 27 Python
Django 缓存配置Redis使用详解
Jul 23 Python
python mysql断开重连的实现方法
Jul 26 Python
python 实现按对象传值
Dec 26 Python
对python中return与yield的区别详解
Mar 12 Python
python matplotlib包图像配色方案分享
Mar 14 Python
python实现socket简单通信的示例代码
Apr 13 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
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
Yii框架form表单用法实例
2014/12/04 PHP
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
在Python中使用列表生成式的教程
2015/04/27 Python
Python实现的科学计算器功能示例
2017/08/04 Python
Python中static相关知识小结
2018/01/02 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
用pycharm开发django项目示例代码
2019/06/13 Python
Django密码系统实现过程详解
2019/07/19 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
Python函数参数分类原理详解
2020/05/28 Python
python实现批处理文件
2020/07/28 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
精彩的英文自荐信
2014/01/30 职场文书
工艺员岗位职责
2014/02/11 职场文书
小学毕业寄语大全
2014/04/03 职场文书
预备党员转正考核材料
2014/06/03 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
销售业务员岗位职责
2015/02/13 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
计划生育责任书
2015/05/09 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书