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实现的生成自我描述脚本分享(很有意思的程序)
Jul 18 Python
wxpython中利用线程防止假死的实现方法
Aug 11 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
Nov 07 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
详谈python中冒号与逗号的区别
Apr 18 Python
基于python-opencv3的图像显示和保存操作
Jun 27 Python
python range实例用法分享
Feb 06 Python
使用Python内置模块与函数进行不同进制的数的转换
Apr 26 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 Python
python如何为list实现find方法
May 30 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(二)
2012/03/21 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
JavaScript错误处理
2015/02/03 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
vue写一个组件
2018/04/09 Javascript
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
gearman的安装启动及python API使用实例
2014/07/08 Python
用Python给文本创立向量空间模型的教程
2015/04/23 Python
Django中处理出错页面的方法
2015/07/15 Python
python调用百度语音识别api
2018/08/30 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
Python序列类型的打包和解包实例
2019/12/21 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
美国校园市场:OCM
2017/06/08 全球购物
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
什么样的创业计划书可行性高?
2014/02/01 职场文书
创建青年文明号材料
2014/05/09 职场文书
文化产业实施方案
2014/06/07 职场文书
优秀员工事迹材料
2014/12/20 职场文书
继续教育个人总结
2015/03/03 职场文书
新郎婚礼致辞
2015/07/27 职场文书
学校标语口号大全
2015/12/26 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python