假设我有一张扫描图像。绿色部分对我有效,我想从 oringal 获取该部分。现在,我正在进行大量的手动计算,然后使用“-rotate”然后“-crop”来获得我想要的。有没有办法从A、B、C的坐标中获取它?我能想到的是在 bash 中写一些东西来
然而,这是重新发明轮子吗?请给我指出正确的方向。
因为不同扫描有很多不同级别的背景噪音,所以不可能使用“-deskew”。
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 表达式