美文网首页
48. 图片修补

48. 图片修补

作者: 十里江城 | 来源:发表于2019-11-13 08:52 被阅读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

    修补图片:

    步骤:

    • 读取待修复图片
    • 创建修复掩码paint
    • 修复图片
    • 显示修复后的图片
    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

    相关文章

      网友评论

          本文标题:48. 图片修补

          本文链接:https://www.haomeiwen.com/subject/vbxcictx.html