2

Python を使用してプログラムでビットマップを変更したいのですが、この件について徹底的に説明する必要はないので、仕事を成し遂げるために必要なことだけを学ぶことに集中したいと思います。

私が求めているものの良い例は、イングランドのビットマップ画像であり、それは郡です。これにより、最初は白い背景にすべての郡の周りに黒い境界線が表示されます。

ここまでは順調ですが、郡の背景色を動的に変更するにはどうすればよいでしょうか?

頭のてっぺんから、単純なペイント アプリと同様に機能するフラッド フィル ルーチンを見つけられるのではないかと考えていました。指定した色で囲まれた領域内のすべてのピクセルを変更するもの。PIL ドキュメントをざっと見ましたが、フラッド フィル関数として認識できるものは見つかりませんでした。

マスクが何であるか、またはそれをどのように使用するかはまだ正確にはわかりませんが、これは私が探求すべき道かもしれません. 郡ごとにマスクを定義し、そのマスクを使用して入力プロセスをガイドすることはできますか? 後でプログラムで使用するために、ビットマップ内にマスクを定義して格納できますか?

パスも同じですか?

どんな助けや指針も大歓迎です。

4

2 に答える 2

6

PILには文書化されていない機能がありますImageDraw.floodfill:

>>> import ImageDraw
>>> help(ImageDraw.floodfill)
Help on function floodfill in module ImageDraw:

floodfill(image, xy, value, border=None)
    Fill bounded region.

(フラッド フィリングは、アンチエイリアス ラインとの相互作用が不十分なため、通常は最後の手段にする必要があります。通常は、郡の実際の境界データを取得してから、塗りつぶされたポリゴンを描画することをお勧めします。ただし、PIL はアンチエイリアスをサポートしていません。そのため、描画モジュールをPythonMagickpycairoなどのより機能的なものに切り替えない限り、このアドバイスは役に立ちません。)

于 2012-04-05T11:02:24.043 に答える
3

Python で opencv バインディングを試すことができます。ここにいくつかの例があります: http://opencv.willowgarage.com/documentation/python-introduction.html

その後、関数を使用しcvFloodFillて領域を塗りつぶすことができます。

于 2012-04-05T10:09:56.947 に答える