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的源码来解析Python下的freeblock
May 11 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
Oct 09 Python
python中logging包的使用总结
Feb 28 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
在python中,使用scatter绘制散点图的实例
Jul 03 Python
python for循环remove同一个list过程解析
Aug 14 Python
python 并发编程 阻塞IO模型原理解析
Aug 20 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
Python 过滤错误log并导出的实例
Dec 26 Python
Python文件夹批处理操作代码实例
Jul 21 Python
python palywright库基本使用
Jan 21 Python
发工资啦!教你用Python实现邮箱自动群发工资条
May 10 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
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
javascript DOM的详解及实例代码
2017/03/06 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
python使用Berkeley DB数据库实例
2014/09/26 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
天游软件面试
2013/11/23 面试题
医学院护理专业应届生求职信
2013/11/12 职场文书
婚礼秀策划方案
2014/05/19 职场文书
服装设计专业求职信
2014/06/16 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
违纪检讨书范文
2015/01/27 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
详解mysql三值逻辑与NULL
2021/05/19 MySQL
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js