基础

你们可能家里都会有一些老照片已经有黑点啊,划痕啊等。你有想过修复它们么?我们不能简单的在绘图工具里把他们擦除了就完了。因为这样只是把黑色的东西变成白色的而已,实际上没用。在这种情况下,会用到一种技术叫图像修复。基本的思想很简单:用周围的像素替换坏掉的像素,这样看上去就和周围一样了。比如下面这张:

很多算法被设计来干这个,OpenCV提供了两个,可以用同一个函数来访问: cv2.inpaint()

第一个算法是基于论文"An Image Inpainting Technique Based on the Fast Marching Method"。是基于快速匹配方法的。假设图像里的一个区域要修复。算法从这个区域的边界开始,逐渐地进入区域,把边界内的所有东西填充上。它取要修复的部分周围的一个像素周围的一小片邻居。这个像素被周围已知的像素的标准加权和替换掉。选择权重是很重要的。要修复的点周围像素的权重较高。和正常边界近的,还有在边界轮廓上的像素的权重较高。当像素被修复以后,它会通过快速匹配方法(FMM)移动到最近的像素。FMM保证那些已知像素周围的像素首先被修复,所以这个就像人工启发式的操作一样。这个算法使用标志cv2.INPAINT_TELEA开启。

第二个算法基于论文"Navier-Stokes, Fluid Dynamics, and Image and Video Inpainting".这个算法基于流体动力学和偏微分方程。基本原则是启发式。它首从已知区域先沿着边缘到未知区域访问(由于边缘应该是连续的)。在匹配边要修复区域边界的梯度向量时持续画等值线(把相同亮度的点用线连起来,类似于轮廓线)。这时候用到流体动力学。之后会填充颜色以减小最小方差。这个算法用标志cv2.INPAINT_NS启用。

编码

我们需要创建和输入图像相同大小的掩图,需要修复的区域对应的像素要非0.剩下的就简单了。我的图像被一些黑色划痕给破坏了(实际上是我自己加的)。我用绘图工具对应的标记出来。import numpy as np

import cv2

img = cv2.imread('messi_2.jpg')

mask = cv2.imread('mask2.png',0)

dst = cv2.inpaint(img,mask,3,cv2.INPAINT_TELEA)

cv2.imshow('dst',dst)

cv2.waitKey(0)

cv2.destroyAllWindows()

看下面的结果。第一个图片是输入图像,第二个是掩图,第三个是用第一种算法的结果,最后一张是第二种算法的结果。

END

opencv python教程简书_OpenCV-Python教程:57.图像修复相关推荐

  1. python教程简书_Python快速教程

    配到python源码实例学习更佳:http://www.eyesourcecode.com/f/Python/1 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎 ...

  2. python 数据挖掘 简书_[Python数据挖掘入门与实践]-第一章开启数据挖掘之旅

    1.数据挖掘简介(略) 2.使用Python和IPython Notebook 2.1.安装Python 2.2.安装IPython 2.3.安装scikit-learn scikit-learn是用 ...

  3. opencv python教程简书_Python-OpenCV —— 基本操作一网打尽

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.MacOS操作系统上.它轻量级而且高效--由一系列 C 函数和少量C++类构成,同时提供了Pyt ...

  4. python scatter 简书_写给 Pythonist 的 Spacemacs 入门指北

    前言 最开始,使用 Sublime Text 编码,后来用 Vim 混合 PyCharm 写 Python. 前几天,Github 上的 Spacemacs 已经成功的突破一万 Star, 听说几个我 ...

  5. 简书python_如何用python刷简书文章的浏览量

    作者:bigtrace 大家在简书上发表文章,最喜欢关心今天又多了多少访问量和赞.当然不只是简书,大部分的博客网站或者音乐社交如QQ空间,网易云音乐,都会去记录文章或者音乐的浏览或收听次数.可是你知道 ...

  6. python关键词 打标签详解_Python学习日记13|利用python制作简书首页热门文章关键词标签云...

    今天是6.16号. 昨天去面越秀金融风险控制部计算机实习生,去面了才知道主要也就是做数据抓取这一块.面试过程中有问到分词,然后自己心虚的说了有接触过分词这一块,面试结果就不去想了,过不过都其实不重要了 ...

  7. python snap7 简书_第14篇-Python中的Elasticsearch入门

    我的Elasticsearch系列文章,逐渐更新中,欢迎关注 另外Elasticsearch入门,我强烈推荐ElasticSearch搭建手册给你,非常想尽的入门指南手册. 在本文中,我将讨论Elas ...

  8. 用 python selenium 爬简书,Python自动化领域之 Selenium WebDriver 学习第2篇

    本篇博客使用 selenium 实现对简书官网的操作. 文章目录 通过 selenium 执行 JS selenium 实现简书搜索 selenium 隐式与显式等待 selenium 采集京东图书 ...

  9. 学python买什么书-关于 Python 的经典入门书籍有哪些?(python三大经典书)

    如何学python python数据分析的门低果python零基础开始学习的步骤大概是python基础.数据采集.数据处理.数据分析.数据可视化. 首先学习一点python基础的知识,Python语言 ...

最新文章

  1. 安卓开发面试书籍,全世界都在问Android开发凉了吗?建议收藏
  2. docker內安装TOPT
  3. 太硬核了,50年前的登月程序和程序员绝对超乎你的想象
  4. Classes and Objects :类和对象(2)
  5. [Storage]RPM series linux rescan disk / RPM系Linux重新扫描硬盘
  6. Makefile--如何将当前文件下的所有*.cpp文件与*.c文件全部生成相应的可执行文件
  7. 用Unity同时开发【微信小游戏】【安卓】【IOS】游戏#6.2 WebSocket通信
  8. KMS命令激活office2016
  9. 嘀嗒APP打车体验记
  10. BUUCTF 命令执行/文件包含类型部分wp
  11. [Hack The Box] HTB—Paper walkthrough
  12. html如何让图片边缘模糊化,如何淡化图片周围区域?照片四周虚化怎么弄|最好的照片处理软件...
  13. 【模型↔关系思考法】如何在一个全新的、陌生的领域快速成为专家?模仿 + 一万小时定律 + 创新...
  14. 编写frame.java_returnordersubmitframe.java~83~ 源代码在线查看 - 用java编写的进销存系统 资源下载 虫虫电子下载站...
  15. 国际绝对音名十二等律标准音高频率对照表(浮点型精度、十二等律体系、A4=440.01000Hz)
  16. 会计与计算机发展现状及发展趋势,会计电算化的现状及其发展趋势毕业论文.doc...
  17. 有关名片设计全面知识-名片制作须知
  18. Spring data JPA -针对一对多关系中,分页查询一的一方部分,但查询条件中有多的一方参数
  19. 人工智能机器学习——西瓜决策树
  20. 寄托 圣三一学院计算机,圣三一学院(Trinity College)留学文书写作指南(2020版)...

热门文章

  1. canvas中的橡皮檫
  2. 违反mysql三范式_违反数据库第三范式引发的一个问题
  3. 用Python怎么多赚钱?6种办法用上 让你过上挣钱的好日子
  4. c语言网络编程断点续传,网络编程(三) 下载任务,支持断点续传(示例代码)...
  5. 微信小程序面试题(day08)
  6. Django-Docker容器化部署:Django-Docker-MySQL-Nginx-Gunicorn云端部署
  7. 进度条程序详解(Linux)
  8. matlab中removeback的意思,remove是什么意思
  9. 在PC上通过手机发送短消息
  10. 无须注册的云盘平台anonfile