一、学习目标

  1. 了解高斯模糊的使用方法
  2. 了解毛玻璃的图片效果添加
  3. 了解如何自己做一个噪声图片

上一篇:[python opencv 计算机视觉零基础到实战] 九、模糊

如有错误欢迎指出~

二、了解模糊与美颜

2.1 使用高斯模糊降噪

由于很多小伙伴反应抛开原理或理论讲解使用用法对于初学者来说会很舒服,从本节开始将会以比较简单的方式进行讲解相关API的应用。

首先我们有一张图:

这张图存在很多的噪点,那如何对改图片进行降噪呢?学过前几节的同学可能对降噪还是挺了解的。可能有些同学会说均值模糊和中值模糊。那我们先试试中值模糊:
首先获取图片:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\111.png')
dst=cv2.medianBlur(img,5)

随后进行中值模糊,并等待:

cv2.imshow("img", dst)
cv2.waitKey (0)
cv2.destroyAllWindows()

结果如下:

从结果中可以得知,确实降噪的效果不错,但是有一定的糊。现在我们再试试均值模糊。把中值模糊代码改为:

dst=cv2.blur(img,(2,24))

结果如下:

感觉更糊了,现在我们用我们高斯模糊试试水。高斯模糊使用API GaussianBlur,高斯模糊使用加权平均法对该半径、范围进行模糊。
GaussianBlur方法原型如下:

cv2.GaussianBlur( SRC,ksize,sigmaX )

我们在当前代码中使用中可以按如下参数传递:

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

其中img是要进行模糊的图像,(5,5)是高斯核的大小,一般核大小都是奇数,最后一个为标准差,我们直接取0即可。
若我(5,5)写成(1,1)则表示不对原始图像做操作。核越大图像的模糊程度越大。适当取合适值可以使图片模糊度不至于过糊。如果需要进行过滤图像的大小相等时,那么一般(5,5)的两个值都是一样,其实可以看做一个比例大小。我们添加原图显示与高斯模糊后的效果进行对比,完整代码如下:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\111.png')
dst=cv2.GaussianBlur(img,(5,5),0)
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.imshow("Image", img)
cv2.imshow("Gaussian", dst)
cv2.waitKey (0)
cv2.destroyAllWindows()

结果如下:


从图片上来看高斯模糊对于整个轮廓的改变效果还是挺小的。其实高斯模糊对于我们来说应该是挺熟悉的,高斯模糊在一些图片处理软件上会用来对图片增加毛玻璃效果。这时我们只需要将核大小置零,随后更改方差值,这是就会出现毛玻璃效果。代码如下:

dst=cv2.GaussianBlur(img,(0,0),20)

2.2 自己编写噪点图片

其实2.1中的噪点图片是我自己编辑而成,那自己如何编写类似的噪点图片呢?很简单只需要遍历图片大小即可。遍历图片大小对像素点进行随机值的增加。如何遍历图片?只需要获取图片的宽高,对图片进行遍历即可。
首先我们读取图片后对图片进行宽高获取:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\111.png')
h,w,c=img.shape

随后遍历每个像素点:

for row in range(h):for col in range(w):b=img[row,col,0]g=img[row,col,1]r=img[row,col,2]

以上外层循环中遍历高元素,随后内层循环遍历每个高元素的宽度元素;在宽度元素中获取3个通道的值。有些小伙伴可能会说,为什么获取3个通道的值不使用循环?那是因为若使用循环会导致复杂度增加,会让程序运行的更慢,所以为了减少复杂度,在这里我使用了较为“笨”的方法直接读取3个通道的值。
随后随意生成一个3位随机数,对该图片的像素点进行增加:

srand=np.random.normal(0,30,3)
img[row,col,0]=b+srand[0]
img[row,col,1]=g+srand[1]
img[row,col,2]=r+srand[2]

结果如下:咦?那为什么变成这个样子了?先别急,我们直接使用高斯模糊进行降噪吧:

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

结果如下:

咦?感觉降噪效果还不错,这个时候我们就应该明白,“高斯模糊使用加权平均法对该半径、范围进行模糊”,我们可以很清楚的从结果图中看见噪声在该色值周围得到了一定的“还原”。

好了,我们现在来探究为什么这个图编辑了随机值后有的会白白的。那是因为我们没有做“溢出”计算;我们在计算值的增减时应该考虑该值是否超过了255又或者是否小于了0,若小于0则置0,若大于255则等于255。因为如果我们加上一个值,小于0,那么表示这个值本省偏暗,直接置0所偏向并没有改变;若大于255则表示偏亮,直接等于255不会改变颜色的偏向,所以这样做是没问题的,极大限度的保留了原图的基本样貌。那么此时的代码的完整代码如下:

import cv2
import numpy as npimg = cv2.imread(r'C:\Users\mx\Desktop\111.png')
h,w,c=img.shapefor row in range(h):for col in range(w):srand=np.random.normal(0,30,3)b=img[row,col,0]g=img[row,col,1]r=img[row,col,2]if b+srand[0]>255:img[row,col,0]=255elif b+srand[0]<0:img[row,col,0]=0else:img[row,col,0]=b+srand[0]if g+srand[1]>255:img[row,col,1]=255elif g+srand[1]<0:img[row,col,1]=0else:img[row,col,1]=g+srand[1]if r+srand[2]>255:img[row,col,2]=255elif r+srand[2]<0:img[row,col,2]=0else:img[row,col,2]=r+srand[2]
#dst=cv2.blur(img,(2,24))
dst=cv2.GaussianBlur(img,(0,0),20)
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.imshow("Image", img)
cv2.imshow("Gaussian", dst)
cv2.waitKey (0)
cv2.destroyAllWindows()

结果如下:

该系列文章首发于ebaina

三、总结

  1. 了解了制作噪声图片的注意事项,偏亮偏暗值需要等值赋予
  2. 了解高斯模糊的使用方法及保留轮廓的特性

[python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃相关推荐

  1. [python opencv 计算机视觉零基础到实战] 十六、用opencv画画

    一.学习目标 了解如何使用line方法 了解如何使用rectangle方法 了解如何使用ellipse方法 如有错误欢迎指出~ 二.了解OpenCV的绘图方法 2.1 了解直线绘图方法 我们在前两节中 ...

  2. [python opencv 计算机视觉零基础到实战] 十二 直方图

    一.学习目标 了解matplotlib绘图库的使用 了解如何通过折线图或者直方图对图表进行绘制 了解了通过图标对图片内容进行直观判断 如有错误欢迎指出~ 二.了解图像直方图及其应用 2.1 了解mat ...

  3. [python opencv 计算机视觉零基础到实战] 十九、简易绘画板制作

    一.学习目标 了解事件 编写一个简易绘画板 二.了解如何制作简易绘画板 2.1 了解鼠标多种事件 上一节我们简单的使用opencv的图形绘制方法,用鼠标绘制了一些内容.上一节所响应的是简单的双击事件E ...

  4. [python opencv 计算机视觉零基础到实战] 十八、用鼠标进行画画

    一.学习目标 了解如何在图片中加入文字 了解如何使用鼠标进行图像绘制 二.了解如何通过鼠标进行图像绘制 2.1 了解putText方法的使用 putText方法接收图像,文字内容, 坐标 ,字体,大小 ...

  5. [python opencv 计算机视觉零基础到实战] 十五 直方图反向投影

    一.学习目标 了解了直方图反向投影的一般流程 了解2D直方图的使用 如有错误欢迎指出~ 二.了解直方图反向投影 2.1 了解2D直方图 需要对直方图进行反向投影,需要使用2D直方图.2D直方图需要使用 ...

  6. [python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容

    一.学习目标 了解图片内容定位方法matchTemplate使用 了解minMaxLoc方法使用 上一篇<[python opencv 计算机视觉零基础到实战] 十.图片效果毛玻璃> 如有 ...

  7. [python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充

    一.学习目标 了解什么是ROI 了解floodFill的使用方法 如有错误欢迎指出~ 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[pyth ...

  8. [python opencv 计算机视觉零基础到实战] 七、逻辑运算与应用

    一.学习目标 了解opencv中图像的逻辑运算 了解opencv中逻辑运算的应用 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...

  9. [python opencv 计算机视觉零基础到实战] 六、图像运算

    一.学习目标 了解opencv中图像运算的方法 了解opencv中图像运算的运用 如有错误欢迎指出~ 二.了解OpenCV中图像运算的运用 目录 [python opencv 计算机视觉零基础到实战] ...

最新文章

  1. 全国通用计算机一级考试模板,共享WPS中符合国人习惯的好模板
  2. 读郭老师推荐书籍--《原则》
  3. LaTeX 基础笔记。开篇
  4. bzoj5194: [Usaco2018 Feb]Snow Boots
  5. HDU1054 Strategic Game —— 最小点覆盖 or 树形DP
  6. 【Python之旅】第一篇:基于文件处理的登陆接口
  7. iOS网络请求架构图URL Loading System
  8. linux was8.5 无法启动wct.sh,WebSphere(was8.5) 在linux集群安装及部署.docx
  9. 触屏西门子plc和计算机通讯,西门子S7-200CPU之间及它们与触摸屏之间数据读取如何连接?...
  10. 读书笔记——晶体管电路设计
  11. 数据库原理与应用——课程介绍及数据库系统概论(上)
  12. win7计算机节电模式,大师详解win7省电模式怎么关的方法介绍
  13. 《Spring实战》读书笔记-第6章 渲染Web视图
  14. 适当修改LIO-SAM_based_relocalization解决初始重定位显示错误
  15. 用Python爬取拉钩网招聘职位信息
  16. 不顺本也正常,斗志不可磨灭
  17. 王者荣耀6月23服务器维护,王者荣耀6月23日维护到几点 王者荣耀6月23日维护延期补偿...
  18. Windows中telnet不是内部或外部命令解决方法
  19. 解决联想拯救者显卡花屏
  20. 多谢您―skycc群发软件

热门文章

  1. VS2019 调试技巧之附加进程
  2. 简单理解线程同步上下文
  3. Dotnet Core异常处理的优雅实践
  4. 基于 abp vNext 和 .NET Core 开发博客项目
  5. 创业周年记:召唤神龙一周年小记
  6. .NET Core中使用Dapper操作Oracle存储过程最佳实践
  7. [NewLife.XCode]脏数据
  8. Build 2017 | 一文看懂微软 Build 2017 大会:让 AI 走向边缘
  9. 了解 C# foreach 内部语句和使用 yield 实现的自定义迭代器
  10. 博客园官方 NuGet镜像上线试运行