写在最前

想必生活在2020的我们一定不得不对PS有所了解或者接触,虽然现在借助人工智能技术,ps已经变成了一代“神级”妖术,但是忆往昔,早期的PS其实也不过是一堆计算机视觉里的算法罢了。其实我们就可以使用计算机视觉里的技术来做一次人肉PS,提到计算机视觉逃不过的坎肯定是OpenCV,而又绕不过的坎肯定是深度学习,所以我们干脆点直接opencv-python来进行我们的旅程。只不过这次我不想剑指(剑指系列,之前写的一系列一般会由浅入深,最终目标是深挖)了,所以我们这次漫谈计算机视觉,从最基本的OpenCV慢慢讲起,一直讲到这几年比较好的深度学习各个领域。

正文开头

OpenCV一个出色的开源框架,其中Open指的就是OpenSource,开源。而CV则是计算机视觉(Computer Vision)。依靠OpenCV背后开源社区背书,其不仅在过去实现了绝大多数计算机视觉所需要的基础算法,同时也能跟随时代发展不断更新新的神经网络。

我们在之前曾经编写过OpenCV实现人脸识别,为了更好地进行之后技术的发展。我们自然需要对OpenCV进一步学习。今天就是从最基本的内容——去除噪点开始,同时学习OpenCV的基本操作。

计算机女神——蕾娜

lena图是计算机视觉非常经典的图像,她的优势在于图像颜色丰富,明暗明显,而且轮廓,边角等都有丰富存在对演示多种算法都有不错的效果(当然也很漂亮,所以更容易广泛传播)。我们这次包括之后都会有很多地方能够用到她。顺便一提,上面这幅图片来自OpenCV的官方,你可以在opencv的github项目中找到她。

图片的读取,展示与存储

opencv的安装非常简单,我们主要在python中使用它,因此使用“pip install opencv-python”进行安装即可。然后我们在python中引用OpenCV类库,并使用即可。

读取和保存的具体代码如下:

import cv2 as cv# 读取图片
src=cv.imread('/lena.jpg')# 存储图片
cv.imwrite('images/lena_write.jpg',src)

可以看到代码非常简单,那么如何进行如想处理呢?其实也非常简单,只需要对src进行操作即可,具体的操作粗略的来说有两大类:第一类,使用opencv的方法进行处理,包括类型转换,滤波,反转等等图像操作,在这一类操作中,图像依旧是opencv的存储格式。而第二大类,则是从比较数学的角度考虑,存储的图像本质不过是一个多维矩阵(或者多维数组),那么我们自然也可以使用python中的其他矩阵处理的类库对其进行处理,甚至编写自己的图像处理算法等等。

我们刚刚说到的展示图片,本质也是一种矩阵操作——以合适的像素展示于屏幕。我们也可以有多种方法解决该问题,下面就是有关代码:

# 展示图片
cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE)
cv.imshow('input_image', src)
cv.waitKey(0)# 删除建立的全部窗口,释放资源
cv.destroyAllWindows()

上面的代码非常简单,甚至在这里第一行还可以没有,也没有太大影响。至于代码的具体解释如下:第一行代码的参数namedWindow,是创建一个窗口,第一个参数是窗口名字,第二个是尺寸。inshow适用于展示图片的函数,第一个参数是输入的窗口的标题,第二个是存储的图像。第三行是等待输入以确定之后的操作,不设置的话,之前创建的窗口会直接退出。我们也可以通过设置具体的输入键,使窗口在接收输入之后自动执行后续的代码。最后一行是删除所有窗口来释放计算资源,主要是为了保障资源的释放,这样更安全合理一些。

图片加噪

许多时候图片会出现噪点,目前随着各种技术的提升,噪点已经比较少见了,但是我们仍然会很多更专业的领域遇到这类问题。opencv就自带了很多滤波方法可以用于去噪,同时也带有多种去噪。我们首先使用随机函数为图片添加随机的噪点,也就是白点,然后使用非局部平均算法进行去噪。由于opencv的原图大小为400×400,所以我们需要生成的随机噪点范围为(0,399)。

filePath = 'images/lena.jpg'
img = cv.imread(filePath)for i in range(1000): #生成1000个噪点a = random.randint(0,399)b = random.randint(0,399)img[a,b] = 255cv.imshow("noise",img)       # 显示噪点图

图像去噪

不同的去噪方法对应着不同的噪点,我们这里首先使用非局部平均算法进行图像去噪,这是一种比较通用的去噪方法。缺点在于由于采用图像的冗余数据进行去噪,对于边缘部分的处理效果往往比较不太好。

dst = cv.fastNlMeansDenoisingColored(img, None, 12, 12, 7, 21)# 保存图片
cv.imwrite("/home/fonttian/Documents/MyBlog/OpenCV/images/lena_noise_1000_do.jpg",dst)

由上面可以看出该方法并不太适用于边缘噪点,同时由于进行了局部平均,因此也会丧失一些局部细节。那么这个时候我们就需要使用一些更直接的滤波方法进行去噪。常见的滤波器有很多种,滤波器本身就是一个小的矩阵,也本质等同与现在深度学习常用的卷积核。只不过我们这里是直接使用特定的军阵运算对图像进行处理。与局部平均算法类似的是均值滤波,但是如果只是简单的将几个相邻的数值进行均值计算的话,由于我们这里的添加是白噪点(最大像素255),那么就会不可避免的导致周围平均后全部变白。因此我们需要使用的是其他参数。这里我们选择了中值滤波进行滤波。两种滤波器的参数都是指参数范围。具体代码和效果如下:

# 均值模糊  去随机噪声有很好的去噪效果
#(1, 15)是垂直方向模糊,(15, 1)是水平方向模糊,我们这里是随机单个白噪点,选择(3,3)进行演示
dst = cv.blur(img, (3, 3))

中值滤波则比较合适,具体代码和效果如下

dst = cv.medianBlur(img, 3)

可以看到中值滤波在这里的去噪效果和细节保留都非常好。而如果假如我们面对更多的噪声类型,则也需要具体情况具体分析,选择合理的处理方法。这个我们将在之后的内容中一一教给大家。

专栏地址

CSDN

漫谈计算机视觉

github

fongtian的github项目–漫谈计算机视觉

公众号
本文章首发于我司的公众号“小白白AI学习”,这是我们高寻真源(山东)教育科技有限公司创办的公众号,主要目标是为了促进大数据与人工智能在山东高校的发展和落地。欢迎大家关注我们的公众号,一起交流学习,共同进步。

从去除噪点的说起,有OpenCV要什么PS?相关推荐

  1. 如何使用AI图片清晰度增强器软件增强和锐化图片、提高照片清晰度并去除噪点

    通过使用深度学习AI算法对照片进行批量锐化.去噪和去模糊处理,该程序可以应用再大部分照片和图片,包括徽标.卡通和动漫 可能很多朋友都会遇到需要批量增强和锐化照片的情况:例如,如果拍摄过程中曝光不足.夜 ...

  2. 边缘检测后去除噪点_修图前vs修图后,原来那些网红“照骗”都是这样修出来的!...

    如今手机上有许多功能强大的后期app 都能帮助我们轻松实现一键修图 我们也经常可以在网上看到 各路大神们各显神通的手机修图作品 无论是风景.人像还是创意 修图前和修图后对比强烈.美若两图 看到这里你是 ...

  3. python去除噪点_如何用python搞定验证码中的噪点

    背景:朋友在为"关山口男子职业技术学校"写一款校园应用,于是找MoonXue写一个学生选课系统的登录接口.为了搞定这个接口,不得不先搞定这个系统的验证码. 验证码大概是这个样子 看 ...

  4. 边缘检测后去除噪点_图片背景处理与噪点去除

    概述 本文主要讲述的是数字图像处理中对图像背景的处理以及图片噪点的去除,运用到的方法有高斯模糊.灰度二值化.连通域检检测 1.算法原理 高斯模糊 引用Wikipedia的两句话: Mathematic ...

  5. c# bitmap 去除噪点_黑头怎么去除最有效用盐处理的方法推荐

    作为学生,许多条件非常有限所以, 像一些黑点, 没有良好的治疗条件.所以, ?学生如何独自摆脱青春痘?  黑头怎么去除最有效用盐 编辑与您分享一些技巧,能有效去除黑头,?让我们一起在下面看看! 一.盐 ...

  6. 边缘检测后去除噪点_Street Lanes Finder - 检测自动驾驶汽车的车道

    作者 | Greg Surma 来源 | Medium ​编辑 | 代码医生团队 在今天的文章中,将使用基本的计算机视觉技术来解决对于自动驾驶汽车至关重要的街道车道检测问题.到本文结束时,将能够使用P ...

  7. 中值滤波去除噪点项目设计书

    这是毕业第一年的时候写的一个项目程序,贡献出来,供大家学习,交流,不做商用. 这是fpga做的图像中值滤波,图像的分辨率是256*256.以下是详细东西,有这个算法的详细思考过程,和程序,还有做出来的 ...

  8. java如何去除噪点_如何对付噪点?简单4步提升画质| 数码暗房

    噪点是摄影的一大敌人,想要对付它,你得先花点功夫了解它. 首先,噪点究竟是个什么鬼? 噪点分为明度噪点和颜色噪点,明度噪点是均匀分布在画面中的细小黑白颗粒,颜色噪点则是画面中分布的不均匀色块,后者在J ...

  9. opencv 去除噪点 java_c++ - OpenCV-去除图像中的噪点 - 堆栈内存溢出

    我在OpenCV中尝试了一些过滤器/操作,它似乎工作得很好. 第1步: 放大图片- kernel = np.ones((5, 5), np.uint8) cv2.dilate(img, kernel, ...

最新文章

  1. 朴素贝叶斯预测是否为垃圾短信
  2. Android:安卓APP开发显示一个美女,安卓APP开发显示两个美女
  3. Android Telephony分析(五) ---- TelephonyRegistry详解
  4. 如何使用 HTTP Headers 来保护你的 Web 应用
  5. 【mDNS】本地DNS解析协议
  6. Qt调用OpenCV汇总(1)
  7. springboot---基本模块详解
  8. 【JVM】浅谈双亲委派和破坏双亲委派
  9. 深度linux更新卡,深度操作系统已发布更新 新增“ apt-get custom-update”命令行
  10. 7PYX 网站代码下载
  11. ZZULIOJ 1083: 数值统计(多实例测试)
  12. [Web 开发] URL 的最大长度
  13. CSS Friendly 中的DetailsView的问题
  14. Java设计模式01:设计模式的 分类 和 设计原则
  15. 吸尘器上亚马逊要求UL1017测试报告怎么办
  16. D8(YT88)加密狗破解与加密工具
  17. 关于导弹飞行控制系统的滚转稳定
  18. 程序员最爱的 10 个在线社区,你去过几个?
  19. UISlider实现背景图
  20. mysql_assoc函数_关于PHP的函数mysql_fetch_assoc的问题

热门文章

  1. Axure8.0深入一点(篇)
  2. 对字符串数组排序,使所有变位词都相邻(C++)
  3. Android之ListView的getItemViewType和getViewTypeCount
  4. 详谈调用winpcap驱动写arp多功能工具
  5. 在iOS中求数组元素中最大数与最小数
  6. SpringBoot项目依赖本地jar包
  7. 软件工程--软件设计
  8. 作为阿里的面试官,我有话想说
  9. IT从业者都应关注的软件行业的变化
  10. 一段Spring代码引起的调用绑定总结