imagemagick 通过两个角和对边上的一个点获取一个矩形

问题描述 投票:0回答:1

假设我有一张扫描图像。绿色部分对我有效,我想从 oringal 获取该部分。现在,我正在进行大量的手动计算,然后使用“-rotate”然后“-crop”来获得我想要的。有没有办法从A、B、C的坐标中获取它?我能想到的是在 bash 中写一些东西来

  1. 根据 A 和 B 的坐标计算斜率
  2. 计算旋转角度
  3. 旋转
  4. 计算 A、B 和 C 的新坐标
  5. 计算其他角的坐标
  6. 作物

然而,这是重新发明轮子吗?请给我指出正确的方向。

因为不同扫描有很多不同级别的背景噪音,所以不可能使用“-deskew”。

rotation imagemagick crop
1个回答
0
投票

ImageMagick 可以使用其内置的 FX 表达式进行一些相当广泛的计算。 Windows 语法中的这个简单命令使用带有 FX 表达式的“+扭曲”操作,实际上是旋转图像以将点“A”和“B”对齐在同一水平面上,同时保持 AB 的长度...

magick input.png ^
   -set option:ax 50 ^
   -set option:ay 46 ^
   -set option:bx 472 ^
   -set option:by 82 ^
   -virtual-pixel white ^
   +distort affine "%[ax],%[ay] %[ax],%[ay] %[bx],%[by] %[fx:hypot(bx-ax,by-ay)],%[ay]" ^
   result.png

这会根据您的示例图像创建此结果...

点的坐标可以作为脚本中的变量发送到命令中。

最终的“-crop”操作将从“ax,ay”开始,并使用“hypot(bx-ax,by-ay)”作为宽度。我不准备计算点“C”的最终位置来确定作物的高度,但稍微精通三角函数的人可能可以使用另一个 FX 表达式轻松完成此操作。

在此处阅读有关使用 FX 表达式的更多信息... ImageMagick FX 表达式

© www.soinside.com 2019 - 2024. All rights reserved.