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爬虫之xpath的基本使用详解
Apr 18 Python
Python应用库大全总结
May 30 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
详解如何在Apache中运行Python WSGI应用
Jan 02 Python
对python判断ip是否可达的实例详解
Jan 31 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
python同时替换多个字符串方法示例
Sep 17 Python
pygame实现打字游戏
Feb 19 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
PyMongo 查询数据的实现
Jun 28 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
一个php作的文本留言本的例子(六)
2006/10/09 PHP
PHP与SQL注入攻击[一]
2007/04/17 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
js获取form的方法
2015/05/06 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
python简单猜数游戏实例
2015/07/09 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
2017/08/07 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
如何在C# winform中异步调用web services
2015/09/21 面试题
假面舞会策划方案
2014/05/29 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
律政俏佳人观后感
2015/06/09 职场文书
导游词之徐州云龙湖
2019/11/19 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS