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实现探测socket和web服务示例
Mar 28 Python
Python写的Socks5协议代理服务器
Aug 06 Python
python中的五种异常处理机制介绍
Sep 02 Python
Python序列之list和tuple常用方法以及注意事项
Jan 09 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
python使用itchat实现手机控制电脑
Feb 22 Python
TensorFlow模型保存/载入的两种方法
Mar 08 Python
利用python脚本如何简化jar操作命令
Feb 24 Python
jupyter notebook 中输出pyecharts图实例
Apr 23 Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 Python
python requests.get带header
May 05 Python
Python xlrd模块导入过程及常用操作
Jun 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
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
php时间计算相关问题小结
2016/05/09 PHP
轻松实现php文件上传功能
2017/02/17 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
python单线程实现多个定时器示例
2014/03/30 Python
Python实现的计数排序算法示例
2017/11/29 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
Python3最长回文子串算法示例
2019/03/04 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
python3.7 sys模块的具体使用
2019/07/22 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
会议开场欢迎词
2014/01/15 职场文书
运动会广播稿80字
2014/01/23 职场文书
中学教师自我鉴定
2014/02/07 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
购房协议书范本
2014/10/02 职场文书
2016暑期社会实践新闻稿
2015/11/25 职场文书
详解Nginx 工作原理
2021/03/31 Servers
JavaScript中isPrototypeOf函数
2021/11/07 Javascript
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL