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实现随机选择元素功能
Sep 14 Python
python Pygame的具体使用讲解
Nov 03 Python
python读写csv文件的方法
Aug 13 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
python计算导数并绘图的实例
Feb 29 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
Python flask框架如何显示图像到web页面
Jun 03 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
运行python提示no module named sklearn的解决方法
Nov 29 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
Python中可变和不可变对象的深入讲解
Aug 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调用Google translate_tts api实现代码
2013/08/07 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
为javascript添加String.Format方法
2020/08/11 Javascript
javascript 函数速查表
2010/02/07 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
原生JS实现留言板
2020/03/26 Javascript
python删除过期文件的方法
2015/05/29 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
电大学习个人自我评价范文
2013/10/04 职场文书
高一军训决心书
2015/02/05 职场文书
护林员个人总结
2015/03/04 职场文书
刑事撤诉申请书
2015/05/18 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
靠谱准确的求职信
2019/04/02 职场文书
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
Java详细解析==和equals的区别
2022/04/07 Java/Android