ImageMagick-更改选定边界框的背景色

ImageMagick-更改选定边界框的背景色,imagemagick,background-image,crop,bounding-box,Imagemagick,Background Image,Crop,Bounding Box,我已经有了所选边界框的规范化顶点(例如xmin:0.68、ymin:0.47、xmax:0.94、ymax:0.82),我想将此框保存在另一个.jpg文件中。此外,在原始图像中,我想使这个高亮显示的框全部为白色。这可以使用Imagemagick吗 从这个开始: 如果知道纪念碑的左上角位于400,10,右下角位于500200,则可以使用以下命令将纪念碑提取到文件中: magick photo.jpg -crop 100x190+400+10 extract.jpg 并用以下材料覆盖白色: m

我已经有了所选边界框的规范化顶点(例如xmin:0.68、ymin:0.47、xmax:0.94、ymax:0.82),我想将此框保存在另一个.jpg文件中。此外,在原始图像中,我想使这个高亮显示的框全部为白色。这可以使用Imagemagick吗

从这个开始:

如果知道纪念碑的左上角位于
400,10
,右下角位于
500200
,则可以使用以下命令将纪念碑提取到文件中:

magick photo.jpg -crop 100x190+400+10 extract.jpg

并用以下材料覆盖白色:

magick photo.jpg -fill white -draw "rectangle 400,10 500,200" overpainted.jpg
magick photo.jpg -fill "rgba(255,255,255,0.5)" -draw "rectangle 400,10 500,200" overpainted.jpg

或者,为了额外的乐趣,用半透明的白色覆盖:

magick photo.jpg -fill white -draw "rectangle 400,10 500,200" overpainted.jpg
magick photo.jpg -fill "rgba(255,255,255,0.5)" -draw "rectangle 400,10 500,200" overpainted.jpg


您可以一次完成这两项操作:

magick photo.jpg \( +clone -fill white -draw "rectangle 400,10 500,200" -write overpainted.jpg +delete \) -crop 100x190+400+10 extract.jpg
从这一点开始:

如果知道纪念碑的左上角位于
400,10
,右下角位于
500200
,则可以使用以下命令将纪念碑提取到文件中:

magick photo.jpg -crop 100x190+400+10 extract.jpg

并用以下材料覆盖白色:

magick photo.jpg -fill white -draw "rectangle 400,10 500,200" overpainted.jpg
magick photo.jpg -fill "rgba(255,255,255,0.5)" -draw "rectangle 400,10 500,200" overpainted.jpg

或者,为了额外的乐趣,用半透明的白色覆盖:

magick photo.jpg -fill white -draw "rectangle 400,10 500,200" overpainted.jpg
magick photo.jpg -fill "rgba(255,255,255,0.5)" -draw "rectangle 400,10 500,200" overpainted.jpg


您可以一次完成这两项操作:

magick photo.jpg \( +clone -fill white -draw "rectangle 400,10 500,200" -write overpainted.jpg +delete \) -crop 100x190+400+10 extract.jpg

使用ImageMagick版本6,下面的命令将创建两个输出图像。(ImageMagick版本7的一个示例命令在下面的回复中进一步介绍。)

将使用边界框从输入图像裁剪第一个输出图像,边界框从w*0.68xh*0.47开始,到w*0.94xh*0.82结束

第二个输出将是具有与裁剪出的子图像对应的白色部分的输入,以生成第一个图像

convert input.png \
   -set option:distort:viewport "%[fx:(w*0.94)-(w*0.68)]x%[fx:(h*0.82)-(h*0.47)]" \
   \( +clone -distort affine "0,0 -%[fx:w*0.68],-%[fx:h*0.47]" \
   -write result1.png -fill white -colorize 100 \) \
   -set page "%[fx:u.w]x%[fx:u.h]+%[fx:t*(u.w*0.68)]+%[fx:t*(u.h*0.47)]" \
   -flatten result2.png
首先读取输入图像并根据您提供的边界框尺寸计算视口,即要裁剪的子图像的尺寸

然后在括号内创建一个克隆,并执行“-扭曲仿射”,这实际上会裁剪图像并将其正确定位在该视口中。它将结果写入第一个输出图像“result1.png”。然后,仍然在括号内,它用白色填充裁剪的部分

之后,它设置分页几何体,以便最终可以将白色片段合成回其在输入图像上的原始位置

最后,它将白色部分展平到输入图像上,并写入第二个输出图像“result2.png”

同样的事情也可以通过使用ImageMagick版本7完成,只需稍微简单一点的命令

magick input.png \
   \( +clone \
   -crop "%[fx:(w*0.94)-(w*0.68)]x%[fx:(h*0.82)-(h*0.47)]+%[fx:w*0.68]+%[fx:h*0.47]" \
   -write result1.png -fill white -colorize 100 \) \
   -flatten result2.png
这将直接在“-crop”操作中进行计算,分页几何图形将保存在裁剪的工件中,以便可以将其展平回其原始位置,而无需重置几何图形


这些都是*nix语法。要使其在Windows中工作,请将连续的行反斜杠“\”更改为插入符号“^”,并删除那些从括号“\(…\)”中转义的反斜杠

使用ImageMagick版本6,下面的命令将创建两个输出图像。(ImageMagick版本7的一个示例命令在下面的回复中进一步介绍。)

将使用边界框从输入图像裁剪第一个输出图像,边界框从w*0.68xh*0.47开始,到w*0.94xh*0.82结束

第二个输出将是具有与裁剪出的子图像对应的白色部分的输入,以生成第一个图像

convert input.png \
   -set option:distort:viewport "%[fx:(w*0.94)-(w*0.68)]x%[fx:(h*0.82)-(h*0.47)]" \
   \( +clone -distort affine "0,0 -%[fx:w*0.68],-%[fx:h*0.47]" \
   -write result1.png -fill white -colorize 100 \) \
   -set page "%[fx:u.w]x%[fx:u.h]+%[fx:t*(u.w*0.68)]+%[fx:t*(u.h*0.47)]" \
   -flatten result2.png
首先读取输入图像并根据您提供的边界框尺寸计算视口,即要裁剪的子图像的尺寸

然后在括号内创建一个克隆,并执行“-扭曲仿射”,这实际上会裁剪图像并将其正确定位在该视口中。它将结果写入第一个输出图像“result1.png”。然后,仍然在括号内,它用白色填充裁剪的部分

之后,它设置分页几何体,以便最终可以将白色片段合成回其在输入图像上的原始位置

最后,它将白色部分展平到输入图像上,并写入第二个输出图像“result2.png”

同样的事情也可以通过使用ImageMagick版本7完成,只需稍微简单一点的命令

magick input.png \
   \( +clone \
   -crop "%[fx:(w*0.94)-(w*0.68)]x%[fx:(h*0.82)-(h*0.47)]+%[fx:w*0.68]+%[fx:h*0.47]" \
   -write result1.png -fill white -colorize 100 \) \
   -flatten result2.png
这将直接在“-crop”操作中进行计算,分页几何图形将保存在裁剪的工件中,以便可以将其展平回其原始位置,而无需重置几何图形


这些都是*nix语法。要使其在Windows中工作,请将连续的行反斜杠“\”更改为插入符号“^”,并删除那些从括号“\(…\)”中转义的反斜杠

这里是ImageMagick 6中的另一个变体。它裁剪图像并保存,然后删除。然后使用-region将白色写入该边界框

这是Unix语法。对于Windows,从括号中删除\并将行尾\更改为^

输入:



这里是ImageMagick 6的另一个变体。它裁剪图像并保存,然后删除。然后使用-region将白色写入该边界框

这是Unix语法。对于Windows,从括号中删除\并将行尾\更改为^

输入:



请为您的问题添加一些上下文。边界框如何表示为浮点数?请显示起始图像和相应的预期结果。请为您的问题添加一些上下文。边界框如何表示为浮点数?请显示起始图像和相应的预期结果。为什么在-crop中使用100x190+400+10?我的意思是,400+10是左上角,但100x190是什么?crop命令使用
宽度
高度
,因此这些是x值和y值之间的差异,而不是它们的绝对位置。对不起,我可以在我的回答中更好地解释这一点。是的,谢谢!相反,如果我想使用ImageMagick版本6,我必须更改什么?为什么在-crop中使用100x190+400+10?我的意思是,400+10是左上角,但100x190是什么?crop命令使用