Python如何生成随机高斯模糊图片详解

作者:Cloudox_ 时间:2021-08-25 13:07:18 

高斯模糊的介绍与原理

通常,图像处理软件会提供"模糊"(blur)滤镜,使图片产生模糊的效果。

"模糊"的算法有很多种,其中有一种叫做"高斯模糊"(Gaussian Blur)。它将正态分布(又名"高斯分布")用于图像处理。

所谓"模糊",可以理解成每一个像素都取周边像素的平均值。

Python如何生成随机高斯模糊图片详解

上图中,2是中间点,周边点都是1。

Python如何生成随机高斯模糊图片详解

"中间点"取"周围点"的平均值,就会变成1。在数值上,这是一种"平滑化"。在图形上,就相当于产生"模糊"效果,"中间点"失去细节。

Python如何生成随机高斯模糊图片详解

显然,计算平均值时,取值范围越大,"模糊效果"越强烈。

Python如何生成随机高斯模糊图片详解

上面分别是原图、模糊半径3像素、模糊半径10像素的效果。模糊半径越大,图像就越模糊。从数值角度看,就是数值越平滑。

接下来的问题就是,既然每个点都要取周边像素的平均值,那么应该如何分配权重呢?

如果使用简单平均,显然不是很合理,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系越疏远。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。

python生成高斯模糊

Python可以使用opencv库很方便地生成模糊图像,如果没有安装opencv的,可以用pip安装:


pip install python-opencv

想了解高斯模糊是什么的话,可以看wiki百科-高斯模糊。对于一般人,只要知道这个操作可以生成模糊图片就好了,一行代码即可搞定:


import cv2
img = cv2.GaussianBlur(ori_img, (9, 9), 0)

这个函数的第一个参数是原图像,第二个参数是高斯矩阵,要注意长和宽都必须为单数,第三个参数是标准差,如果写0,则函数会自行计算。

那怎么控制模糊程度呢?很简单,高斯矩阵的尺寸越大,标准差越大,处理过的图像模糊程度越大。

介绍完了简单的高斯模糊操作,我们加一个随机处理,来随机生成模糊程度不同的几张图像,其实也很简单,加一个随机函数来生成高斯矩阵的尺寸就可以了:


import cv2
import random

imgName = "img.png"
min_size = 11

ori_img = cv2.imread(imgName)

for i in range(3):
   addition = random.choice((0, 2, 4, 6, 8, 10, 12))
   size = min_size + addition
   kernel_size = (size, size)
   img = cv2.GaussianBlur(ori_img, kernel_size, 0)
   new_imgName = "New_" + str(i) + "_" + str(kernel_size[0])  + "_" + imgName
   cv2.imwrite(new_imgName, img)

这里利用了random库,来在一组数字中随机选择一个数,加到最小尺寸上,作为每次生成的模糊图片的高斯矩阵尺寸,这里我的尺寸最小值设为了11,大家可以根据需要自己尝试看效果来设定。

总结

来源:https://www.jianshu.com/p/c9cd81297fe7/

标签:python,高斯模糊,原理
0
投稿

猜你喜欢

  • python unichr函数知识点总结

    2022-02-03 11:48:31
  • Python Socket实现远程木马弹窗详解

    2022-11-28 10:04:39
  • Mysql入门系列:优化MYSQL服务器

    2008-11-24 13:25:00
  • 最新Python APScheduler 定时任务详解

    2021-05-03 21:58:53
  • python打印日志方法的使用教程(logging模块)

    2023-12-10 01:39:14
  • Asp用正则表达式获取文章中的所有图片地址

    2010-07-17 13:11:00
  • Python logging模块原理解析及应用

    2022-04-08 11:14:32
  • 如何高效使用Python字典的方法详解

    2021-07-26 04:29:03
  • IE7新支持的CSS属性和属性选择符

    2008-03-16 14:26:00
  • 详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)

    2022-01-24 04:44:33
  • python类和继承用法实例

    2021-07-24 17:31:30
  • pandas.DataFrame中提取特定类型dtype的列

    2021-06-13 06:04:25
  • Python使用base64模块进行二进制数据编码详解

    2023-08-26 20:13:13
  • Python实现名片管理系统

    2022-01-11 21:45:12
  • python列表数据增加和删除的具体实例

    2021-08-05 15:11:09
  • python 实现百度网盘非会员上传超过500个文件的方法

    2021-01-31 19:45:37
  • ASP中Global.asa使用方法说明

    2007-11-03 13:18:00
  • Python实现四个经典小游戏合集

    2021-08-16 12:17:35
  • Xml中SelectSingleNode方法中的xpath用法

    2010-01-30 12:46:00
  • python中的global关键字的使用方法

    2023-07-15 13:26:50
  • asp之家 网络编程 m.aspxhome.com