天天看點

opencv學習24——圖像簡單修複

一、

圖像的簡單修複

1.實作過程:通過蒙版圖像(提取的污損部分圖像),通過算法使用周圍像素填充

2. cv2.inpaint(src, inpaintMask, inpaintRadius, flags[, dst])

Src,需要修補的原圖像

inpaintMask,修補蒙版

inpaintRadius,修補半徑

flags,修補算法,有基于快速行進算法 cv2.INPAINT_TELEA及基于流體動力學并使用了偏微分方程 cv2.INPAINT_NS

二、

import cv2
import numpy as np

def dmgImage(img):
    for i in range(200,300):
        img[200,i] = (255, 255, 255)
        img[200,i+200] = (255, 255, 255)

    for i in range(300,400):
        img[300,i] = (255,255,255)

    cv2.imwrite('image02.jpg',img)

    return img

def maskImg(maskShape):
    mask = np.zeros(maskShape,np.uint8)

    for i in range(200,300):
        mask[200,i] = 255
        mask[200,i+200] = 255

    for i in range(300,400):
        mask[300,i] = 255

    return mask

def repair1(dmg,mask):
    dstImg = cv2.inpaint(dmg,mask,3,cv2.INPAINT_TELEA)
    return dstImg

def repair2(dmg,mask):
    dstImg = cv2.inpaint(dmg, mask, 3, cv2.INPAINT_TELEA)
    return dstImg

img = cv2.imread('image01.jpg',1)
imgHeight,imgWidth,_ = img.shape
dmg = dmgImage(img)
mask = maskImg((imgHeight,imgWidth))
dst1 = repair1(dmg,mask)
dst2 = repair2(dmg,mask)

cv2.imshow('damaged image',dmg)
cv2.imshow('mask image',mask)
cv2.imshow('dst image1',dst1)
cv2.imshow('dst image2',dst2)
cv2.waitKey(0)
cv2.destroyAllWindows()