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和pyqt实现360的CLable控件
Feb 21 Python
python检测某个变量是否有定义的方法
May 20 Python
python代码实现ID3决策树算法
Dec 20 Python
python生成圆形图片的方法
Mar 25 Python
python读取和保存图片5种方法对比
Sep 12 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
Python3爬虫学习入门教程
Dec 11 Python
python实现桌面壁纸切换功能
Jan 21 Python
Python File(文件) 方法整理
Feb 18 Python
pandas 层次化索引的实现方法
Jul 06 Python
pytorch实现建立自己的数据集(以mnist为例)
Jan 18 Python
tensorboard实现同时显示训练曲线和测试曲线
Jan 21 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执行速度全攻略(上)
2006/10/09 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
PHP运行模式汇总
2016/11/06 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
详解JavaScript中的表单验证
2015/06/16 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
微信小程序轮播图swiper代码详解
2020/12/01 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python实现批量转换文件编码的方法
2015/07/28 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
C语言中break与continue的区别
2012/07/12 面试题
创业计划书如何吸引他人眼球
2014/01/10 职场文书
化学教育专业求职信
2014/07/08 职场文书
代领毕业证委托书
2014/08/02 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书