gpt4 book ai didi

algorithm - 使用 ImageMagick 裁剪具有焦点区域(面部)的图像

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:17 32 4
gpt4 key购买 nike

我正在努力寻找正确的方法来调整大小、裁剪和图像,以及重点区域。在我的例子中,焦点区域是图像中检测到的人脸,我需要确保该区域在裁剪后的版本中可见。

我有例如给出的重点领域。 face_height、face_width、face_center_x 和 face_center_y。这些值是原始图像尺寸的百分比。

我想做的是得到一个例子。 60x60 缩略图。通常的方法是调整大小,使图像的高度或宽度等于 60px,然后从中心裁剪 60x60,如下所示:

mogrify -resize 60x -gravity 'Center' -crop 60x60 image.jpg

可以采用什么方法将我的裁剪集中在给定区域周围?

我正在考虑一个包含多个路径的解决方案:

  1. 如果面部区域大于所需的缩略图,请调整图像大小,使整个面部在 60x60 像素中可见,然后裁剪
  2. 如果脸部区域小于想要的缩略图,则裁剪“扩大”我的脸部区域,直到我想要的拇指可以容纳在区域内。然后裁剪。我想我需要确保这不会超出原始图像的范围。

有没有更聪明的方法?你能试着做一些示例代码吗?

谢谢!

最佳答案

我会先在脚本或程序中进行算术运算,然后将精确坐标输入 ImageMagick。

运算步骤:

  • 使用精确的像素值比使用百分比更容易,因此转换 face_heightface_widthface_center_xface_center_y 到像素值。
  • 你需要矩形缩略图,所以选择最长的边并用它来操作:

    longest_side = max(face_height, face_width)

  • 现在您可以计算裁剪的左上角点:

    crop_x = face_center_x - longest_side/2
    crop_y = face_center_y - longest_side/2

  • 如果四个裁剪角中的任何一个超出您的图片尺寸,请进行调整:

    • crop_xcrop_y 都应该 >= 0
    • crop_x + longest_side 应小于图像宽度
    • crop_y + longest_side 应小于图像高度

计算完这些后,ImageMagick 调用变得非常简单:

mogrify -crop {longest_side}x{longest_side}+{crop_x}+{crop_y} -resize 60x60 image.jpg   

关于algorithm - 使用 ImageMagick 裁剪具有焦点区域(面部)的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4813608/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com