Imagemagick 如何使用Convert撤消或删除绘制的矩形?

Imagemagick 如何使用Convert撤消或删除绘制的矩形?,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,我已经用转换这个画了一个矩形的图像现在我想撤销这个怎么办?帮忙 convert Image1.jpg -fill black -draw "rectangle 135,55 155,60" Image2.jpg 在图像上绘制矩形后,它会将图像中的像素替换为矩形的颜色。你不能撤销它。您可以使用Imagemagick中的形态学技术将矩形的颜色替换为附近图像像素的一些解释,方法是从同一矩形制作一个遮罩,并使用该遮罩将形态学处理后的图像或中值滤波图像与带矩形的图像混合但是更好的方法是使用一些修复工具。

我已经用转换这个画了一个矩形的图像现在我想撤销这个怎么办?帮忙

convert Image1.jpg -fill black -draw "rectangle 135,55 155,60" Image2.jpg

在图像上绘制矩形后,它会将图像中的像素替换为矩形的颜色。你不能撤销它。您可以使用Imagemagick中的形态学技术将矩形的颜色替换为附近图像像素的一些解释,方法是从同一矩形制作一个遮罩,并使用该遮罩将形态学处理后的图像或中值滤波图像与带矩形的图像混合但是更好的方法是使用一些修复工具。但是Imagemagick没有后者。请参见OpenCV或Skipage

下面是如何在Imagemagick中使用形态学(或中值滤波)来缓解这种情况

创建测试图像

convert lena.png -fill none -stroke black -strokewidth 1 -draw "translate 128,128 rectangle -50,-50 50,50" -alpha off lena_rect.png
convert lena_rect.png lena_rect_open.png rect.png -compose over -composite result.png

使用形态学关闭(也可以使用-统计中值5x5)


为遮罩创建矩形(比图像中厚一点)


Do复合

convert lena.png -fill none -stroke black -strokewidth 1 -draw "translate 128,128 rectangle -50,-50 50,50" -alpha off lena_rect.png
convert lena_rect.png lena_rect_open.png rect.png -compose over -composite result.png

补充:

为了进行比较,这里有来自opencv和skimage的3种修复方法

#!/opt/local/bin/python3.7

import cv2
import numpy as np
import skimage.io
import skimage.restoration
import skimage.exposure

# method choice: biharmonic, Navier-Stokes, Telea
method = 'biharmonic'
#method = 'Navier-Stokes'
#method = 'Telea'


if method == 'biharmonic':
    print('biharmonic')

    img = skimage.io.imread('/Users/fred/desktop/lena_rect.png')

    msk = skimage.io.imread('/Users/fred/desktop/rect.png')
    msk = skimage.exposure.rescale_intensity(msk, in_range='image', out_range=(0,1))

    newimg = skimage.restoration.inpaint_biharmonic(img, msk, multichannel=True)

    skimage.io.imsave('/Users/fred/desktop/lena_rect_inpaint_biharmonic.png', newimg)

elif method == 'Navier-Stokes':
    print('Navier-Stokes')

    img = cv2.imread('/Users/fred/desktop/lena_rect.png')

    msk = cv2.imread('/Users/fred/desktop/rect.png',0)

    newimg = cv2.inpaint(img, msk, 3, cv2.INPAINT_NS)

    cv2.imwrite('/Users/fred/desktop/lena_rect_inpaint_navier_stokes_15.png', newimg)

elif method == 'Telea':
    print('Telea')

    img = cv2.imread('/Users/fred/desktop/lena_rect.png')

    msk = cv2.imread('/Users/fred/desktop/rect.png',0)

    newimg = cv2.inpaint(img, msk, 3, cv2.INPAINT_TELEA)

    cv2.imwrite('/Users/fred/desktop/lena_rect_inpaint_telea_3.png', newimg)

双谐波:

纳维尔·斯托克斯:

电视台:


只需使用
Image1.jpg
,该命令不会影响它。@MarkSetchell我知道这不会影响,但我们必须从受影响的图像中恢复原始图像。我在回答中添加了一项内容,以显示同一输入图像的3个修复结果。