OpenCV中图像修补技术由inpaint函数实现。
基本步骤是:先修复区域边缘再逐步向内推进修复。
可以用来清除照片灰尘、划痕或者从静态图像及视频中去除不需要的物体。
图像修补函数—cv2.inpaint()
def inpaint(src, inpaintMask, inpaintRadius, flags, dst=None):
# inpaint(src, inpaintMask, inpaintRadius, flags[, dst]) -> dst
- src:输入图像,需要为8位单通道(dtype=uint8)或三通道图像
- inpaintMask:修复掩膜,为八位单通道图像,其中非0像素表示需要修补的区域
- dst:函数调用后输出图像,和原图一样的尺寸和类型
- inpaintRadius:需要修补的每一个点的圆形邻域,为修复算法的半径参考(决定修补图像的清晰度)
- flags: 修补方法的标识符
flags有两种算法:基于Navier-Stokes方程方法和Alexandru Telea算法
- INPAINT_NS = CV_INPAINT_NS
- INPAINT_TELEA = CV_INPAINT_TELEA
图像修补示例


import numpy as np
import cv2
img = cv2.imread('../data/messi_2.jpg') # 读取目标图片
mask = cv2.imread('../data/mask2.png', 0) # 读取掩膜图片
dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA) # 使用INPAINT_TELEA算法进行修复
cv2.imshow('TELEA', dst)
dst2 = cv2.inpaint(img, mask, 3, cv2.INPAINT_NS) # 使用INPAINT_NS算法进行修复
cv2.imshow('NS', dst2)
cv2.waitKey(0)
cv2.destroyAllWindows()


注意:图片修补技术也可以对图片进行去水印操作
6461





