3

フォーカス エリアを使用して、サイズ変更、トリミング、画像の正しいアプローチを見つけるのに苦労しています。私の場合、フォーカス エリアは画像内で検出された顔であり、このエリアがトリミングされたバージョンで見えるようにする必要があります。

私は例えばによって与えられたフォーカスエリアを持っています。face_height、face_width、face_center_x、face_center_y。これらの値は、元の画像の寸法のパーセンテージです。

私がやりたいことは、egを取得することです。60x60 のサムネイル。通常のアプローチでは、画像の高さまたは幅が 60 ピクセルになるようにサイズを変更し、次のように中央から 60x60 をトリミングします。

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

代わりに、特定の領域の周りに作物を集中させるには、どのようなアプローチを取ることができますか?

私はいくつかのパスを含むソリューションを考えています:

  1. 顔の領域が目的のサムネイルよりも大きい場合は、顔全体が 60x60 ピクセルで表示されるように画像のサイズを変更してから、トリミングします。
  2. 顔の領域が必要なサムネイルよりも小さい場合は、必要な親指が領域内に収まるまで、顔の領域をトリミングして「拡張」します。次に、トリミングします。これが元の画像の境界を超えないようにする必要があると思います。

よりスマートなアプローチはありますか?サンプルコードをいくつか作ってみてもらえますか?

ありがとう!

4

1 に答える 1

5

最初にスクリプトまたはプログラムで演算を行い、次に正確な座標を ImageMagick に送ります。

算術手順:

  • パーセンテージよりも正確なピクセル値で操作する方が簡単なので、face_heightface_widthface_center_xおよびface_center_yをピクセル値に変換します。
  • 長方形のサムネイルが必要になるため、最も長い辺を選択して操作します。

    longest_side = max(face_height, face_width)

  • これで、作物の左上の点を計算できます。

    crop_x = face_center_x - 最長辺 / 2
    crop_y = face_center_y - 最長辺 / 2

  • 切り抜きの 4 つの角のいずれかが画像のサイズから外れている場合は、それを調整します。

    • 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   
于 2011-02-11T16:50:23.403 に答える