网站备案是针对空间还是域名,软件工程师培训学校,眼镜东莞网站建设,公司官网制作百度一、学习目标
了解高斯模糊的使用方法了解毛玻璃的图片效果添加了解如何自己做一个噪声图片
上一篇:[python opencv 计算机视觉零基础到实战] 九、模糊
如有错误欢迎指出~
二、了解模糊与美颜
2.1 使用高斯模糊降噪
由于很多小伙伴反应抛开原理或理论讲解使用用法对于初学…一、学习目标
了解高斯模糊的使用方法了解毛玻璃的图片效果添加了解如何自己做一个噪声图片
上一篇:[python opencv 计算机视觉零基础到实战] 九、模糊
如有错误欢迎指出~
二、了解模糊与美颜
2.1 使用高斯模糊降噪
由于很多小伙伴反应抛开原理或理论讲解使用用法对于初学者来说会很舒服从本节开始将会以比较简单的方式进行讲解相关API的应用。
首先我们有一张图 这张图存在很多的噪点那如何对改图片进行降噪呢学过前几节的同学可能对降噪还是挺了解的。可能有些同学会说均值模糊和中值模糊。那我们先试试中值模糊 首先获取图片
import cv2img cv2.imread(rC:\Users\mx\Desktop\111.png)
dstcv2.medianBlur(img,5)随后进行中值模糊并等待
cv2.imshow(img, dst)
cv2.waitKey (0)
cv2.destroyAllWindows()结果如下
从结果中可以得知确实降噪的效果不错但是有一定的糊。现在我们再试试均值模糊。把中值模糊代码改为
dstcv2.blur(img,(2,24))结果如下 感觉更糊了现在我们用我们高斯模糊试试水。高斯模糊使用API GaussianBlur高斯模糊使用加权平均法对该半径、范围进行模糊。 GaussianBlur方法原型如下
cv2.GaussianBlur SRCksizesigmaX 我们在当前代码中使用中可以按如下参数传递
dstcv2.GaussianBlur(img,(5,5),0) 其中img是要进行模糊的图像(5,5)是高斯核的大小一般核大小都是奇数最后一个为标准差我们直接取0即可。 若我(5,5)写成(1,1)则表示不对原始图像做操作。核越大图像的模糊程度越大。适当取合适值可以使图片模糊度不至于过糊。如果需要进行过滤图像的大小相等时那么一般(5,5)的两个值都是一样其实可以看做一个比例大小。我们添加原图显示与高斯模糊后的效果进行对比完整代码如下
import cv2img cv2.imread(rC:\Users\mx\Desktop\111.png)
dstcv2.GaussianBlur(img,(5,5),0)
cv2.namedWindow(Image,cv2.WINDOW_NORMAL)
cv2.imshow(Image, img)
cv2.imshow(Gaussian, dst)
cv2.waitKey (0)
cv2.destroyAllWindows()结果如下 从图片上来看高斯模糊对于整个轮廓的改变效果还是挺小的。其实高斯模糊对于我们来说应该是挺熟悉的高斯模糊在一些图片处理软件上会用来对图片增加毛玻璃效果。这时我们只需要将核大小置零随后更改方差值这是就会出现毛玻璃效果。代码如下
dstcv2.GaussianBlur(img,(0,0),20) 2.2 自己编写噪点图片
其实2.1中的噪点图片是我自己编辑而成那自己如何编写类似的噪点图片呢很简单只需要遍历图片大小即可。遍历图片大小对像素点进行随机值的增加。如何遍历图片只需要获取图片的宽高对图片进行遍历即可。 首先我们读取图片后对图片进行宽高获取
import cv2img cv2.imread(rC:\Users\mx\Desktop\111.png)
h,w,cimg.shape随后遍历每个像素点
for row in range(h):for col in range(w):bimg[row,col,0]gimg[row,col,1]rimg[row,col,2]以上外层循环中遍历高元素随后内层循环遍历每个高元素的宽度元素在宽度元素中获取3个通道的值。有些小伙伴可能会说为什么获取3个通道的值不使用循环那是因为若使用循环会导致复杂度增加会让程序运行的更慢所以为了减少复杂度在这里我使用了较为“笨”的方法直接读取3个通道的值。 随后随意生成一个3位随机数对该图片的像素点进行增加
srandnp.random.normal(0,30,3)
img[row,col,0]bsrand[0]
img[row,col,1]gsrand[1]
img[row,col,2]rsrand[2]结果如下咦那为什么变成这个样子了先别急我们直接使用高斯模糊进行降噪吧
dstcv2.GaussianBlur(img,(5,5),0)结果如下 咦感觉降噪效果还不错这个时候我们就应该明白“高斯模糊使用加权平均法对该半径、范围进行模糊”我们可以很清楚的从结果图中看见噪声在该色值周围得到了一定的“还原”。
好了我们现在来探究为什么这个图编辑了随机值后有的会白白的。那是因为我们没有做“溢出”计算我们在计算值的增减时应该考虑该值是否超过了255又或者是否小于了0若小于0则置0若大于255则等于255。因为如果我们加上一个值小于0那么表示这个值本省偏暗直接置0所偏向并没有改变若大于255则表示偏亮直接等于255不会改变颜色的偏向所以这样做是没问题的极大限度的保留了原图的基本样貌。那么此时的代码的完整代码如下
import cv2
import numpy as npimg cv2.imread(rC:\Users\mx\Desktop\111.png)
h,w,cimg.shapefor row in range(h):for col in range(w):srandnp.random.normal(0,30,3)bimg[row,col,0]gimg[row,col,1]rimg[row,col,2]if bsrand[0]255:img[row,col,0]255elif bsrand[0]0:img[row,col,0]0else:img[row,col,0]bsrand[0]if gsrand[1]255:img[row,col,1]255elif gsrand[1]0:img[row,col,1]0else:img[row,col,1]gsrand[1]if rsrand[2]255:img[row,col,2]255elif rsrand[2]0:img[row,col,2]0else:img[row,col,2]rsrand[2]
#dstcv2.blur(img,(2,24))
dstcv2.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
三、总结
了解了制作噪声图片的注意事项偏亮偏暗值需要等值赋予了解高斯模糊的使用方法及保留轮廓的特性