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读写二进制文件的方法
May 09 Python
用Python编写简单的微博爬虫
Mar 04 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
May 25 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
pandas.DataFrame 根据条件新建列并赋值的方法
Apr 08 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
Python Pandas 转换unix时间戳方式
Dec 07 Python
python中sklearn的pipeline模块实例详解
May 21 Python
Python 创建守护进程的示例
Sep 29 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
如何通过一篇文章了解Python中的生成器
Apr 02 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中使用模板的方法
2008/05/24 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
python比较两个列表大小的方法
2015/07/11 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
女大学生毕业找工作的自我评价
2013/10/03 职场文书
营业员个人总结的自我评价
2013/10/25 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
工作收入证明模板
2015/06/12 职场文书
《灰雀》教学反思
2016/02/19 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
Python 多线程之threading 模块的使用
2021/04/14 Python
Python常遇到的错误和异常
2021/11/02 Python