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

一、学习目标

  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. 了解高斯模糊的使用方法及保留轮廓的特性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之自定义View实现带4圆角或者2圆角的效果

1 问题 实现任意view经过自定义带4圆角或者2圆角的效果 2 原理 1) 实现view 4圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行。 2) 实现view上2圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行。 安卓源码里面有这样的类 package and…

java trim()函数_Java - split()函数和trim()函数的使用方法

split()函数和trim()函数的使用方法本文地址: http://blog.csdn.net/caroline_wendy/article/details/24465141详细參考Java API: http://docs.oracle.com/javase/6/docs/api/java/lang/String.htmlsplit()函数是依据參数如",", "-", " "等, 切割…

分布式服务器集群架构方案思考

0x01.大型网站演化 简单说&#xff0c;分布式是以缩短单个任务的执行时间来提升效率的&#xff0c;而集群则是通过提高单位时间内执行的任务数来提升效率。 集群主要分为&#xff1a;高可用集群(High Availability Cluster)&#xff0c;负载均衡集群(Load Balance Cluster&…

交互式 .Net 容器版

1背景介绍 在之前的文章 - 交互式 .Net 中已经介绍了什么是 交互式 .Net&#xff0c;文中是通过 Visual Studio Code 插件的方式实现 交互式 .Net 的。现在&#xff0c;我们将使用容器的方式实现 交互式 .Net。2镜像构建 1. DockerfileFROM mcr.microsoft.com/dotn…

Java 集合练习——3

创建Map集合&#xff0c;创建Emp对象&#xff0c;并将创建的Emp对象添加到集合中&#xff0c;并将id为005的对象从集合中移除 创建Emp类&#xff1a; package jihe;public class Emp {private String id;public String getId() {return id;}public void setId(String id) {this…

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

一、学习目标 了解图片内容定位方法matchTemplate使用了解minMaxLoc方法使用 上一篇《[python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃》 如有错误欢迎指出~ 二、了解从一张图片中找到指定内容的方法 2.1 使用matchTemplate函数对图片中的指定内容进行查找 有…

Linq 实现 DataTable 行转列

前几天写了一篇sqlserver 行转列&#xff0c;http://www.cnblogs.com/li-peng/archive/2012/02/01/2334973.html 由于工作需要&#xff0c;要把查出来的DataTable实现 行转列&#xff0c; 正好这一阵子在用Linq 就做了一个行转列的小例 子 转换前的table: 转换后的table: 代码…

Android Studio之编译提示\app\src\main\res\values\colors.xml:1:1 Error:前言有不允许的内容

1 问题 Android Studio新建立的项目运行莫名其妙提示错误如下 app\src\main\res\values\colors.xml:1:1 Error:前言有不允许的内容 然后我把res目录下面的colors.xml文件打开看如下 <?xml version"1.0" encoding"utf-8"?> <resources>&l…

Hello Playwright:(3)基本概念

下面介绍一下 Playwright 中的基本概念&#xff1a;Headless 浏览器Playwright 需要特定版本的浏览器二进制文件才能运行。这些浏览器都支持 2 种 运行模式&#xff1a;Headless&#xff0c;无浏览器 UI&#xff0c;运行速度较快&#xff0c;常用于自动化运行Headed&#xff0c…

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

一、学习目标 了解matplotlib绘图库的使用了解如何通过折线图或者直方图对图表进行绘制了解了通过图标对图片内容进行直观判断 如有错误欢迎指出~ 二、了解图像直方图及其应用 2.1 了解matplotlib库 在了解图像直方图前我们需要了解一个matplotlib库&#xff0c;matplotli…

shell中的数字

shell中的数字 author :headsen chen date :2017-10-18 15:01:42 个人原创&#xff0c;转载请注明作者&#xff0c;出处&#xff0c;否则依法追究法律责任 1,生成随机数&#xff08;范围&#xff1a;0-32767&#xff09;&#xff0c;用特殊变量&#xff1a;RANDOM 2&#xff…

serviceloader java_【java编程】ServiceLoader使用看这一篇就够了

转载:https://www.jianshu.com/p/7601ba434ff4想必大家多多少少听过spi&#xff0c;具体的解释我就不多说了。但是它具体是怎么实现的呢&#xff1f;它的原理是什么呢&#xff1f;下面我就围绕这两个问题来解释&#xff1a;实现: 其实具体的实现类就是java.util.ServiceLoader…

.NET7 Preview4 之OpenAPI swagger改进

在MiniAPI系列中&#xff0c;《.NET6之MiniAPI(十八)&#xff1a;OpenAPI swagger》介绍了swagger在MiniAPI框架中的使用&#xff0c;当时留下很多不足&#xff0c;随着.NET7 Preview4的推出&#xff0c;这方面得到了很大的改进&#xff0c;我还是使用“十八”这篇文章的案例。…

Swift - 自定义单元格实现微信聊天界面

1&#xff0c;下面是一个放微信聊天界面的消息展示列表&#xff0c;实现的功能有&#xff1a; &#xff08;1&#xff09;消息可以是文本消息也可以是图片消息&#xff08;2&#xff09;消息背景为气泡状图片&#xff0c;同时消息气泡可根据内容自适应大小&#xff08;3&#x…

[python opencv 计算机视觉零基础到实战] 十三 直方图颜色提鲜

一、学习目标 了解了均衡化的作用是什么了解灰度、YUV、彩色图片均衡化的方法是使用什么方法了解了合并通道的方法是什么了解了分离通道的方法是什么 如有错误欢迎指出~ 二、了解图像均衡化 2.1 了解直方图均衡化 图像直方图均衡化主要是对图像中的少数灰度进行压缩&#…

java 中字符串比较方法_java中常用的字符串的比较方法(两种)

比较字符串比较常用的两个方法是运算符“”和String的equals方法。使用“”比较两个字符串&#xff0c;是比较两个对象的的“地址”是否一致&#xff0c;本质就是判断两个变量是否指向同一个对象&#xff0c;如果是则返回true&#xff0c;否则返回的是false。而String类的equal…

分布式服务框架dubbo原理解析 转

alibaba有好几个分布式框架&#xff0c;主要有&#xff1a;进行远程调用(类似于RMI的这种远程调用)的(dubbo、hsf)&#xff0c;jms消息服务(napoli、notify)&#xff0c;KV数据库(tair)等。这个框架/工具/产品在实现的时候&#xff0c;都考虑到了容灾&#xff0c;扩展&#xff…