Python+OpenCV实现图像高斯模糊

看到微信的红包照片之后,就想了解下高斯模糊。最近实习学了Python操作OpenCV,没有好好玩过,今天恰好有空,就试了用Python+OpenCV实现图像高斯模糊。

1. 环境

使用Ubuntu 14.04和Python 2.7.6,OpenCV需要安装,使用:

apt-get install python-opencv

在python中import cv2,没有报错信息则安装成功。

2. 高斯模糊

高斯模糊本质上是低通滤波器,输出图像的每个像素点是原图像上对应像素点与周围像素点的加权和,原理并不复杂。做久了卷积神经网络看这个分外亲切,就是用高斯分布权值矩阵与原始图像矩阵做卷积运算而已。摘录wiki上两段原文:

Mathematically, applying a Gaussian blur to an image is the same as convolving the image with a Gaussian function.

数学上讲,对图像做高斯模糊等同于将图像与高斯函数卷积。

Since the Fourier transform of a Gaussian is another Gaussian, applying a Gaussian blur has the effect of reducing the image’s high-frequency components; a Gaussian blur is thus a low pass filter.

由于高斯分布的傅里叶变换仍然是高斯分布,使用高斯模糊就减少了图像的高频分量,因此高斯模糊是低通滤波器。

至于高斯分布权重矩阵,就是对二维正态分布的密度函数(也就是高斯函数)采样再做归一化的产物。

需要对高斯模糊算法的详细解释,可以参考:
http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html

使用cv2做高斯模糊,只要一行代码调用GaussianBlur函数,给出高斯矩阵的尺寸和标准差就可以:

blur = cv2.GaussianBlur(img,(5,5),0)

这里(5, 5)表示高斯矩阵的长与宽都是5,标准差取0时OpenCV会根据高斯矩阵的尺寸自己计算。概括地讲,高斯矩阵的尺寸越大,标准差越大,处理过的图像模糊程度越大。

3. 实验代码

直接看代码:

#!/usr/bin/env python

import cv2

imgName = "1.jpg";
kernel_size = (5, 5);
sigma = 1.5;

img = cv2.imread(imgName);
img = cv2.GaussianBlur(img, kernel_size, sigma);
new_imgName = "New_" + str(kernel_size[0]) + "_" + str(sigma) + "_" + imgName;
cv2.imwrite(new_imgName, img);

内容非常简单,通过imread读入图片,用kernel_size和sigma定义的高斯矩阵模糊图片,用imwrite保存为一张新图片。

这里使用一只欠雷做实验,原图:
原始图片

经过不同高斯矩阵模糊后的图像:

kernel_size=(5,5), sigma=0.5

kernel_size=(5,5), sigma = 1.5

kernel_size=(9,9), sigma = 1.5

可以看出,趋势的确是高斯矩阵尺寸和标准差越大,处理后的图片越模糊。最后,让我们糊个痛快:

给红包看原图 :)

好了,受不了这么魔性的欠雷,老老实实滚去做毕设了。

4. 参考资料

  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值