48. 图片修补

2019-11-13  本文已影响0人  十里江城

将一张完好的图片破坏,之后使用inpaint()方法进行修补

破坏图片,即画线:

import cv2
import numpy as np
img = cv2.imread('1.jpg', 1)
cv2.imshow('src', img)

# 在完整的图片上画线
# 横坐标(height)画线长50, 竖直方向
for i in range(200, 250):
    img[i, 200] = (255, 255, 255)
    img[i, 200 + 1] = (255, 255, 255)
    img[i, 200 - 1] = (255, 255, 255)
# 纵坐标(width)画线长200, 水平方向
for i in range(100, 300):
    img[250, i] = (255, 255, 255)
    img[250 + 1, i] = (255, 255, 255)
    img[250 - 1, i] = (255, 255, 255)

# 将破坏后的图片写入文件
cv2.imwrite('1_line.jpg', img)
cv2.imshow('image', img)
cv2.waitKey(0)

结果如下:


image.png

修补图片:

步骤:

import cv2
import numpy as np

# 1 显示图片
img = cv2.imread('1_line.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]

# 2 创建修复掩码paint
# 创建通道为1的三维数组
paint = np.zeros((height, width, 1), np.uint8)
print('paint: ', paint.shape)
for i in range(200, 250):
    # 白色
    paint[i, 200] = 255
    paint[i, 200 + 1] = 255
    paint[i, 200 - 1] = 255
for i in range(100, 300):
    paint[250, i] = 255
    paint[250 + 1, i] = 255
    paint[250 - 1, i] = 255
# 显示修复掩码   
cv2.imshow('paint', paint)

# 3 修复图片 
# 参数:
# 1)src 8位1通道或3通道图片: img  
# 2)paint 修复掩码: paint, 8位1通道图像,非零像素表示要修复的区域 
# 3)inpaintRadius 算法考虑的每个点的圆形邻域的半径: 3
# 4)flags: INPAINT_NS基于Navier-Stokes的方法和Alexandru Telea的INPAINT_TELEA方法
imgDst = cv2.inpaint(img, paint, 3, cv2.INPAINT_TELEA)

# 4 显示修复后的图片
cv2.imshow('imgDst', imgDst)
cv2.waitKey(0)

破坏线条的维度为, 374 、272为宽高信息:


image.png

修补后的图片中破坏痕迹不太明显了,原图片、破坏图片的线条和修补后的图片如下:


image.png
上一篇 下一篇

猜你喜欢

热点阅读