インペインティング(画像の自動修復)

V3.0.0
In [29]:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
#Ipythonで表示用の設定
import matplotlib.pyplot as plt
%matplotlib inline

#画像読込
img = cv2.imread('lena.jpg')

#読み込んだ画像に傷を付ける(ここでは矩形を上書き)
img[120:125,100:400]  = 0

#修復領域
mask =  np.zeros((img.shape[1], img.shape[0]), dtype='uint8')
mask[120:125,100:400] = 255

#inpaint実行
#INPAINT_NS    = 0, Navier-Stokes algorithm NS方程式
#INPAINT_TELEA = 1  A.Telea algorithm
dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)

#OpenCVがBGRなのでRGBに変換
disp_dst    = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)
disp_in_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

#画像表示
plt.figure(figsize=(15,6))
plt.subplot(131)
plt.imshow(disp_in_img)
plt.title("degraded input image")

plt.subplot(132)
plt.imshow(mask,cmap = 'gray')
plt.title("mask image (non-zero:inpainting region)")

plt.subplot(133)
plt.imshow(disp_dst)
plt.title("inpainted image(result image)")
Out[29]:
<matplotlib.text.Text at 0x1aa45390>

inserted by FC2 system