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

1_bit 2021-01-20 21:04:49
计算机 Python OpenCV 计算 算机


一、学习目标

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

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

如有错误欢迎指出~

二、了解模糊与美颜

2.1 使用高斯模糊降噪

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

首先我们有一张图:

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

import cv2
img = 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 cv2
img = 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 cv2
img = 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 np
img = cv2.imread(r'C:\Users\mx\Desktop\111.png')
h,w,c=img.shape
for 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]=255
elif b+srand[0]<0:
img[row,col,0]=0
else:
img[row,col,0]=b+srand[0]
if g+srand[1]>255:
img[row,col,1]=255
elif g+srand[1]<0:
img[row,col,1]=0
else:
img[row,col,1]=g+srand[1]
if r+srand[2]>255:
img[row,col,2]=255
elif r+srand[2]<0:
img[row,col,2]=0
else:
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. 了解高斯模糊的使用方法及保留轮廓的特性
版权声明
本文为[1_bit]所创,转载请带上原文链接,感谢
https://i1bit.blog.csdn.net/article/details/112115062

  1. A series of problems and solutions in Java calling Python
  2. python自动化爬取淘宝商品数据导入execl表格
  3. Using Python to automatically punch in the pin / enterprise wechat
  4. 【分享】python+requests接口测试基础
  5. Python automatically crawls Taobao product data and imports it into excel table
  6. C++/Python描述 628. 三个数的最大乘积
  7. Python的容器有哪些?分别有什么作用?
  8. python+requests接口测试基础
  9. 20 行代码:Serverless 架构下用 Python 轻松搞定图像分类和预测
  10. python+requests接口测试基础
  11. [share] Python + requests interface test foundation
  12. C + + / Python description 628. Maximum product of three numbers
  13. What are Python containers and what are their functions?
  14. Testing foundation of Python + requests interface
  15. 20 lines of code: easy to do image classification and prediction with Python under serverless architecture
  16. Python爬取优质高清壁纸网站:彼岸
  17. Testing foundation of Python + requests interface
  18. 【人生苦短,我学 Python】基础篇——列表(Day8)
  19. Python crawls high quality HD Wallpaper website: the other side
  20. Python图像增强与特效-利用百度AI进行黑白图像上色
  21. 【七天搞定Python】day01.Python环境配置、pip、IDE、注释、变量,数据类型、标识符/关键字、输出、输入
  22. Life is short, I learn Python
  23. Python image enhancement and special effects - using Baidu AI to color black and white images
  24. Python environment configuration, Pip, IDE, comment, variable, data type, identifier / keyword, output, input
  25. 为什么说Python是最伟大的语言?看图就知道了 - 知乎
  26. Why is Python the greatest language? Just look at the picture. - Zhihu
  27. 通过创建视频游戏来学习 Python
  28. Learn Python by creating video games
  29. Python3版本下创建计算给定日期范围内工作日方法
  30. Creating a method to calculate working days within a given date range in Python 3
  31. 图解爬虫,用几个最简单的例子带你入门Python爬虫
  32. Graphical crawler, with a few of the simplest examples to take you to the introduction of Python crawler
  33. python+requests基础知识
  34. Basic knowledge of Python + requests
  35. python自定义windowsr日志支持文件分割
  36. python+requests基础知识
  37. Python custom Windowsr log supports file segmentation
  38. Basic knowledge of Python + requests
  39. 高级测试 | Python笔试题
  40. 火了!开源的 Python 抢票神器,过年回家就看这一波了!
  41. Python 爬虫进阶 - 前后端分离有什么了不起,过程超详细!
  42. 【python】使用pip提示ModuleNotFoundError
  43. 【python】虚拟环境搭建
  44. Advanced test | Python written test questions
  45. Fire! Open source Python ticket grabbing artifact, come home to see this wave of New Year!
  46. Python crawler advanced - before and after the end of the separation of what great, super detailed process!
  47. [Python] prompt modulenotfounderror with PIP
  48. Building a virtual environment
  49. Serverless 架构下用 Python 轻松搞定图像分类和预测
  50. Easy image classification and prediction with Python under serverless architecture
  51. python协程爬取某网站的老赖数据
  52. Python coroutine crawls Laolai data of a website
  53. 使用Python分析姿态估计数据集COCO的教程
  54. Using Python to analyze the data set coco of attitude estimation
  55. win环境 python3 flask 上手整理 环境搭建(一)
  56. Getting started with win environment python3 flash
  57. Python实现一个论文下载器,赶紧收藏
  58. win环境 python3 flask 上手整理 快速上手-基础操作(二)
  59. Python 中常见的配置文件写法
  60. Python to achieve a paper Downloader, quickly collect