ImageMagick - 更改选定边界框的背景颜色
ImageMagick - change the background color of the selected bounding box
我已经有了选定边界框的规范化顶点(例如 xmin: 0.68,ymin: 0.47,xmax: 0.94,ymax: 0.82),我想将此框保存在另一个 .jpg 文件中。此外,在原始图像中,我想让这个突出显示的框全白。这可能使用 Imagemagick 吗?
从这里开始:
并且知道纪念碑的 top-left 角位于 400,10
并且 bottom-right 位于 500,200
,您可以使用以下命令将纪念碑提取到文件中:
magick photo.jpg -crop 100x190+400+10 extract.jpg
并用以下方法涂成白色:
magick photo.jpg -fill white -draw "rectangle 400,10 500,200" overpainted.jpg
或者,为了额外的乐趣,用 semi-transparent 白色覆盖:
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 结束的边界框从输入图像裁剪第一张输出图像。
第二个输出将是带有白色部分的输入,对应于 sub-image 裁剪出的第一张图像。
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
首先读取输入图像并根据您提供的边界框尺寸计算视口、sub-image 要裁剪的尺寸。
然后在括号内它创建一个克隆并执行“-扭曲仿射”,实际上,裁剪图像并将其正确定位在该视口中。它将结果写入第一个输出图像 "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,从括号中删除 \ 并将行尾 \ 更改为 ^.
输入:
convert img.jpg \
\( +clone -crop 100x190+400+10 +repage +write result1.jpg +delete \) \
-region 100x190+400+10 -fill white -colorize 100 +region result2.jpg
我已经有了选定边界框的规范化顶点(例如 xmin: 0.68,ymin: 0.47,xmax: 0.94,ymax: 0.82),我想将此框保存在另一个 .jpg 文件中。此外,在原始图像中,我想让这个突出显示的框全白。这可能使用 Imagemagick 吗?
从这里开始:
并且知道纪念碑的 top-left 角位于 400,10
并且 bottom-right 位于 500,200
,您可以使用以下命令将纪念碑提取到文件中:
magick photo.jpg -crop 100x190+400+10 extract.jpg
并用以下方法涂成白色:
magick photo.jpg -fill white -draw "rectangle 400,10 500,200" overpainted.jpg
或者,为了额外的乐趣,用 semi-transparent 白色覆盖:
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 结束的边界框从输入图像裁剪第一张输出图像。
第二个输出将是带有白色部分的输入,对应于 sub-image 裁剪出的第一张图像。
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
首先读取输入图像并根据您提供的边界框尺寸计算视口、sub-image 要裁剪的尺寸。
然后在括号内它创建一个克隆并执行“-扭曲仿射”,实际上,裁剪图像并将其正确定位在该视口中。它将结果写入第一个输出图像 "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,从括号中删除 \ 并将行尾 \ 更改为 ^.
输入:
convert img.jpg \
\( +clone -crop 100x190+400+10 +repage +write result1.jpg +delete \) \
-region 100x190+400+10 -fill white -colorize 100 +region result2.jpg