OpenCV 图像修补

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算法

  1. INPAINT_NS = CV_INPAINT_NS
  2. INPAINT_TELEA = CV_INPAINT_TELEA

图像修补示例
OpenCV 图像修补_第1张图片OpenCV 图像修补_第2张图片

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()

OpenCV 图像修补_第3张图片OpenCV 图像修补_第4张图片


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

你可能感兴趣的:(计算机视觉)