概念

修复是图像插值。数字修复算法在图像插值,照片恢复,缩放和超分辨率等方面具有广泛的应用。

大多数人会在家里放一些旧的退化照片,上面有一些黑点,一些笔画等。你有没有想过恢复它?我们不能简单地在绘画工具中擦除它们,因为它将简单地用白色结构替换黑色结构,这是没有用的。在这些情况下,使用称为图像修复的技术。基本思路很简单:用邻近的像素替换那些坏标记,使其看起来像是邻居(取自维基百科),考虑下面显示的图像:

库函数

dst = cv2.inpaint(src,mask, inpaintRadius,flags)

参数是:

  1. src:输入8位1通道或3通道图像。
  2. inpaintMask:修复掩码,8位1通道图像。非零像素表示需要修复的区域。
  3. dst:输出与src具有相同大小和类型的图像。
  4. inpaintRadius:算法考虑的每个点的圆形邻域的半径。
  5. flags
    1. INPAINT_NS基于Navier-Stokes的方法
    2. Alexandru Telea的INPAINT_TELEA方法

实现

为此目的设计了几种算法,OpenCV提供了两种算法。两者都可以通过相同的函数访问,cv2.inpaint()。

第一种算法基于Alexandru Telea于2004年发表的“基于快速行进方法的图像修复技术”。它基于快速行进方法。考虑图像中要修复的区域。算法从该区域的边界开始,然后进入区域内,逐渐填充边界中的所有内容。它需要在邻近的像素周围的一个小邻域进行修复。该像素由邻居中所有已知像素的归一化加权和代替。选择权重是一个重要的问题。对于靠近该点的那些像素,靠近边界的法线和位于边界轮廓上的像素,给予更多的权重。一旦像素被修复,它将使用快速行进方法移动到下一个最近的像素。 FMM确保首先修复已知像素附近的像素,这样它就像手动启发式操作一样工作。使用标志cv2.INPAINT_TELEA启用此算法。

第二种算法基于Bertalmio,Marcelo,Andrea L. Bertozzi和Guillermo Sapiro于2001年撰写的“Navier-Stokes,流体动力学和图像和视频修补”一文。该算法基于流体动力学并利用偏微分方程。基本原则是heurisitic。它首先沿着已知区域的边缘行进到未知区域(因为边缘是连续的)。它继续等照片(连接具有相同强度的点的线,就像轮廓连接具有相同高度的点一样),同时在修复区域的边界处匹配渐变矢量。为此,使用来自流体动力学的一些方法。获得颜色后,填充颜色以减少该区域的最小差异。使用标志cv2.INPAINT_NS启用此算法。

代码

我们需要创建一个与输入图像大小相同的掩码,其中非零像素对应于要修复的区域。其他一切都很简单。我的图像因一些黑色笔画而降级(我手动添加)。我用Paint工具创建了相应的笔触,同时得到mask。

import numpy as np
from matplotlib import pyplot as plt
import cv2img = cv2.imread('OpenCV_Logo_B.png')     # input
mask = cv2.imread('OpenCV_Logo_C.png',0)  # mask

dst_TELEA = cv2.inpaint(img,mask,3,cv2.INPAINT_TELEA)
dst_NS = cv2.inpaint(img,mask,3,cv2.INPAINT_NS)plt.subplot(221), plt.imshow(img)
plt.title('degraded image')
plt.subplot(222), plt.imshow(mask, 'gray')
plt.title('mask image')
plt.subplot(223), plt.imshow(dst_TELEA)
plt.title('TELEA')
plt.subplot(224), plt.imshow(dst_NS)
plt.title('NS')plt.tight_layout()
plt.show()

这是原图文件和掩码文件:Pictures

输出:

这是输出。第一个是降级的OpenCV徽标,第二个图片是运行FMM所需的掩码。最后两张照片是修补的结果。不确定,但我认为两种修补方法之间没有任何区别,至少对于当前输入而言。

参考链接:
1、OpenCV Image Inpainting官方文档 https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_photo/py_inpainting/py_inpainting.html

2、https://www.bogotobogo.com/python/OpenCV_Python/python_opencv3_Image_reconstruction_Inpainting_Interpolation.php

转载于:https://www.cnblogs.com/lfri/p/10618417.html

Python-OpenCV中的cv2.inpaint()函数相关推荐

  1. 【Python】OpenCV中的cv2.inpaint()函数

    概念 修复是图像插值.数字修复算法在图像插值,照片恢复,缩放和超分辨率等方面具有广泛的应用. 大多数人会在家里放一些旧的退化照片,上面有一些黑点,一些笔画等.你有没有想过恢复它?我们不能简单地在绘画工 ...

  2. python drawline_基于python,OPenCv中基本的绘图函数

    (一)OpenCv中,python接口的基本的绘图函数 1-用于绘制直线的--------cv2.line()函数 2-用于绘制椭圆的--------cv2.ellipse()函数 3-用于绘制矩形的 ...

  3. Opencv中的cv2.calcHist()函数的作用及返回值

    在讨论其返回值前,我们先来介绍以下calcHist()函数的用法: cv2.calcHist()函数 cv2.calcHist()函数的作用:通过直方图可以很好的对整幅图像的灰度分布有一个整体的了解, ...

  4. python opencv写视频——cv2.VideoWriter()

    python opencv写视频--cv2.VideoWriter() 函数原型 cv2.VideoWriter() VideoWriter(filename, fourcc, fps, frameS ...

  5. python中的字体英文名_对python opencv 添加文字 cv2.putText 的各参数介绍

    如下所示: cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3) 各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字 ...

  6. python用函数绘制椭圆_详解opencv中画圆circle函数和椭圆ellipse函数

    1. void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, doub ...

  7. 番外3. Python OpenCV 中如何绘制各种图形?

    本系列专栏写作方式 本系列专栏写作将采用首创的问答式写作形式,快速让你学习到 OpenCV 的初级.中级.高级知识. 3. Python OpenCV 中如何绘制各种图形? 本篇博客主要分享一下在 P ...

  8. python-opencv中的cv2.inRange函数

    opencv  api https://docs.opencv.org/master/ python-opencv中的cv2.inRange函数 原创hjxu2016 最后发布于2017-09-04 ...

  9. python怎么导入opencv_对python opencv 添加文字 cv2.putText 的各参数介绍

    如下所示: cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3) 各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字 ...

最新文章

  1. 油品调和计算软件_燕山石化汽油在线调和系统完成升级改造
  2. TCP拥塞控制算法 — CUBIC的补丁(四)
  3. JavaScript数据迭代方法差别
  4. VS2017 下载离线MSDN文档
  5. 群辉挂载linux nfs,Debian 9 挂载访问已设置的群晖NFS共享文件目录
  6. AIX 查看进程列表
  7. OpenGL基础40:Uniform缓冲
  8. 四川大学计算机学院 学术委员会,学术委员会完整列表
  9. linux判断网卡能否上网,网卡坏了有什么现象?判断网卡是否坏了的方法
  10. Adversarial Machine Learning 经典算法解读(FGSM, DeepFool)
  11. [RK3288][Android7.1]调试笔记 --- Settings设置WLAN热点支持遥控器弹出软键盘输入法
  12. 各种Hash函数和代码
  13. PNG字幕文件自动生成工具
  14. 树莓派GPIO 基础(二)
  15. 在Windows10操作系统中任务栏的网络图标消失不见了该怎么办呢
  16. SSD Trim介绍
  17. docker学习至docker-compose
  18. Docker国内镜像和仓库
  19. SPSS随机对照研究总结
  20. 距离北京奥运还有359天,发布WPF版本的北京2008标志(下)

热门文章

  1. iText如何提取PDF中的数据——1. 总览
  2. 洛达芯片公牛方案适配APP使用参考
  3. NOIP 1155:回文三位数
  4. 设置Redis客户端连接的超时时间
  5. 一天一天学做外挂@第四天-给自己找个贴心小护士[武林外传]
  6. 哪里能练计算机基础知识题库,计算机基础知识练习题集锦.doc
  7. 什么是码原,波特率,比特率,带宽,容量,信噪比
  8. 每日一篇BlackBerry10开发——序
  9. oracle同义词表信息查询
  10. quest3d通道英汉对照部分