【问题标题】:ImageMagick - change the background color of the selected bounding boxImageMagick - 更改选定边界框的背景颜色
【发布时间】:2019-10-10 01:06:00
【问题描述】:

我已经有我选择的边界框的标准化顶点(例如 xmin:0.68,ymin:0.47,xmax:0.94,ymax:0.82),我想将此框保存在另一个 .jpg 文件中。此外,在原始图像中,我想让这个突出显示的框全白。这可以使用 Imagemagick 吗?

【问题讨论】:

  • 请为您的问题添加一些上下文。边界框如何表示为浮点数?请显示起始图像和相应的预期结果。

标签: imagemagick background-image crop bounding-box


【解决方案1】:

从这里开始:

知道纪念碑的左上角是400,10,右下角是500,200,您可以将纪念碑提取到一个文件中:

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 \( +clone -fill white -draw "rectangle 400,10 500,200" -write overpainted.jpg +delete \) -crop 100x190+400+10 extract.jpg

【讨论】:

  • 为什么在 -crop 中使用 100x190+400+10?我的意思是,400+10 是左上角,但 100x190 是什么?
  • crop 命令使用widthheight,因此这些是x 和y 值之间的差异,而不是它们的绝对位置。抱歉,我本可以在回答中更好地解释这一点。
  • 好的,谢谢!相反,如果我想使用第 6 版 ImageMagick,我必须进行哪些更改?
【解决方案2】:

使用 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

首先读取输入图像并根据您提供的边界框尺寸计算视口,即要裁剪的子图像的尺寸。

然后在括号内创建一个克隆并执行“-distort affine”,这实际上是裁剪图像并将其正确定位在该视口中。它将结果写入第一个输出图像“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 中工作,将续行的反斜杠“\”更改为插入符号“^”,并消除那些转义括号“\(...\)”的反斜杠。

【讨论】:

    【解决方案3】:

    这是 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
    


    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2011-04-16
      • 2011-03-29
      • 2011-08-14
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      相关资源
      最近更新 更多