2

黒い線で輪郭が描かれたキャラクターの画像があります (著作権保護のためリンクできません)。キャラクターの輪郭を描いている黒い線は、写真で最も暗いものです (この事実を利用して見つけようと計画しています)。私がする必要があるのは、キャラクターの周りに仮想ボックスを描く 4 つの座標を取得することです。ボックスはできるだけ小さくする必要がありますが、アウトライン化された文字はコンテンツ内に保持されます。ボックスの中心点を使用して、キャラクターのフィギュアの中心点を特定するためにボックスを使用するつもりです。

アウトラインの一部を特定することから始めました。画像上で最も暗い線であるため、getextrema() を使用して輪郭上の少なくとも 1 つの点を取得しましたが、より多くの点を取得し、それらの点を組み合わせてボックスを作成する方法がわかりません。

この問題に対する洞察は大歓迎です。乾杯!

  • 編集 *

これは私が今持っているものです:

im = Image.open("pic.jpg")
im = im.convert("L")
lo, hi = im.getextrema()
im = im.point(lambda p: p == lo)
rect = im.getbbox()
x = 0.5 * (rect[0] + rect[2])
y = 0.5 * (rect[1] + rect[3])

図の内部に入るとかなり一貫しているように見えますが、実際には中心にそれほど近づいていません. 理由はありますか?

4

1 に答える 1

1
  1. おそらく既に持っている極値を使用して、アウトラインを画像の残りの部分から分離する適切なしきい値を見つけます。コントラストが十分に大きい場合、これはそれほど難しくないはずです。最小値に値を追加するだけです。
  2. 見つけた値で画像のしきい値を設定します。この質問を参照してください。バイナリしきい値処理されたイメージで暗い部分を白くしたいので、しきい値より小さい値 ( lambda p: p < T) を使用します。
  3. thresholdedImage.getbbox()アウトラインの境界ボックスを取得するために使用 します
于 2012-10-20T11:53:31.883 に答える