我目前正在寻找一种裁剪图像的方法,但要在一个角度上。我不认为我可以先旋转图像,因为脚本提供了每个角的特定 x,y 坐标。
因此,如果您可以对此进行成像,则会上传 1280x720 的图像。除了图像,它还提供了裁剪区域的 x,x 坐标。然而,左上角和右上角的坐标不会有相同的 y 位置。
这是一个例子
前
后
有任何想法吗 ?
我目前正在寻找一种裁剪图像的方法,但要在一个角度上。我不认为我可以先旋转图像,因为脚本提供了每个角的特定 x,y 坐标。
因此,如果您可以对此进行成像,则会上传 1280x720 的图像。除了图像,它还提供了裁剪区域的 x,x 坐标。然而,左上角和右上角的坐标不会有相同的 y 位置。
这是一个例子
前
后
有任何想法吗 ?
您仍然需要使用三角法来旋转图像,但您可以通过混合不透明度复制和修剪来模拟角度裁剪。
如果所有的点都给你,并且定义了图像大小,只需绘制需要提取的区域
WIDTH=819
HEIGHT=616
TOP_LEFT=669,117
TOP_RIGHT=784,155
BOTTOM_LEFT=544,495
BOTTOM_RIGHT=659,534
convert -size $WIDTHx$HEIGHT xc:black -fill white -stroke white \
-draw "polyline $TOP_LEFT $TOP_RIGHT $BOTTOM_RIGHT $BOTTOM_LEFT" \
mask.png
这种遮罩方法将关闭 Alpha 通道并将背景设置为透明。当我们合成这两个图像时,生成的图像将仅显示我们在蒙版中定义的区域内的内容。(注意:您可能需要将其调整-background
为白色或透明。)
convert source.jpg mask.png -alpha Off -compose CopyOpacity \
-composite -background transparent copyOpacity.png
如果你在一个直角上有两个点,你应该能够遵循atan方法。大多数语言都有 atan2 函数。其他三角问题“旋转矩形”和“如何计算两点之间相对于水平轴的角度? ”
DELTA_Y=$(($HEIGHT-155-534))
DELTA_X=$((784-659))
DEGREE=`awk "BEGIN { pi=4.0*atan2(1.0,1.0)+90; print atan2($DELTA_Y,$DELTA_X)*180/pi; }"`
convert copyOpacity.png -rotate $DEGREE -trim final.png
幸运的是,您可以一步完成所有操作。
#!/bin/bash
WIDTH=819
HEIGHT=616
TOP_LEFT=669,117
TOP_RIGHT=784,155
BOTTOM_LEFT=544,495
BOTTOM_RIGHT=659,534
DELTA_Y=$(($HEIGHT-155-534))
DELTA_X=$((784-659))
DEGREE=`awk "BEGIN { pi=4.0*atan2(1.0,1.0)+90; print atan2($DELTA_Y,$DELTA_X)*180/pi; }"`
convert source.jpg \( -size $WIDTHx$HEIGHT xc:black -fill white -stroke white \
-draw "polyline $TOP_LEFT $TOP_RIGHT $BOTTOM_RIGHT $BOTTOM_LEFT" \) \
-alpha Off -compose CopyOpacity -composite \
-background transparent -rotate $DEGREE -trim \
final.png