トップへ戻る Cdrom || Color || Cursors || Display || Draw || Event || Examples || Font || Gfxdraw || Image || Joystick || Key || Locals || Mask || Mixer || Mouse || Movie || Music || Overlay || Pixelarray || Pygame || Rect || Scrap || Sndarray || Sprite || Surface || Surfarray || Tests || Time || Transform
pygame.mask
    画像のマスク処理を行うためのpygameモジュール。

      pygame.mask.from_surface - 引数に設定したSurfaceオブジェクトのマスク処理結果を戻り値として返します。
      pygame.mask.from_threshold - Surfaceに設定した閾値を基にして、マスク処理結果を作成します。
      pygame.mask.Mask - 二次元ビットマスクを表すpygameオブジェクト。

    ピクセルを正確に素早く特定するのに便利なモジュールです。Maskオブジェクトでは、1ピクセル当たり1ビットのビットフラグを使って、該当するピクセルの位置を記録します。

    このモジュールはpygameのver1.8で新たに実装されました。



    pygame.mask.from_surface
      引数に設定したSurfaceオブジェクトのマスク処理結果を戻り値として返します。
      pygame.mask.from_surface(Surface, threshold = 127) -> Mask

      Surfaceオブジェクトの透明な部分にはビットフラグが設定されず、不透明な部分にはビットフラグが設定されます。

      各ピクセルの透明度については、指定したthreshold引数よりも大きいかで判定をします。

      Surfaceオブジェクトに透過色が設定されている場合は、threshold引数を使ったピクセルの抽出は行われません。



    pygame.mask.from_threshold
      Surfaceに設定した閾値を基にして、マスク処理結果を作成します。
      pygame.mask.from_surface(Surface, color, threshold = (0,0,0,255), othersurface = None, palette_colors = 1) -> Mask

      この命令は、from_surface命令よりも多くの機能を持っています。Surfaceオブジェクトが一つだけ引数に設定された場合、color引数の閾値内の全てのピクセルにビットフラグが設定されます。任意に設定できるothersurface引数が設定されている場合は、Surfaceオブジェクトとothersurfaceオブジェクトで同じ位置にあるピクセルの色を比較し、それが閾値内であればビットフラグが設定されます。



    pygame.mask.Mask
      二次元ビットマスクを表すpygameオブジェクト。
      pygame.Mask((width, height)): return Mask
        Mask.get_size - Maskオブジェクトのサイズを戻り値として返します。
        Mask.get_at - (x,y)座標にビットフラグが設定されていた場合、0以外の値を戻り値として返します。
        Mask.set_at - Maskオブジェクト上の、引数に指定した(x,y)座標にビットフラグを設定します。
        Mask.overlap - Maskオブジェクトをオフセット値を加えた上で比較し、ビットフラグ座標が重複している場合はその重複位置を戻り値として返します。 - 重複していない場合はNone値を戻り値として返します。
        Mask.overlap_area - 重複している'ピクセル'座標の数を戻り値として返します。
        Mask.overlap_mask - ピクセルの重複している座標を抽出してMaskオブジェクトを作り、戻り値として返します。
        Mask.fill - 全てのビットを1に設定します。
        Mask.clear - 全てのビットを0に設定します。
        Mask.invert - Maskオブジェクトの全てのビットを反転させます。
        Mask.scale - Maskオブジェクトの大きさを変更します。
        Mask.draw - 別のMaskオブジェクトのビットフラグ情報を重ね書きします。
        Mask.erase - 別のMaskオブジェクトを基にして、ビットフラグ情報を削除します。
        Mask.count - ビットフラグが設定されているピクセルの数を戻り値として返します。
        Mask.centroid - Maskオブジェクトに記録されているピクセルの重心となる位置を戻り値として返します。
        Mask.angle - ピクセルの向きを戻り値として返します。
        Mask.outline - ピクセルが連なっている範囲の輪郭を表す座標一覧
        Mask.convolve - Maskオブジェクトと別のMaskオブジェクトの畳み込み積分を戻り値として返します。
        Mask.connected_component - ピクセルが連なっている範囲を基に、Maskオブジェクトを作成します。
        Mask.connected_components - ピクセルが連なっている範囲を基に、Maskオブジェクトの一覧を作成します。
        Mask.get_bounding_rects - ピクセルが連なっている範囲の外枠部分の一覧を、rectオブジェクト型の戻り値として返します。


      Mask.get_size
        Maskオブジェクトのサイズを戻り値として返します。
        Mask.get_size() -> (width,height)


      Mask.get_at
        (x,y)座標にビットフラグが設定されていた場合、0以外の値を戻り値として返します。
        Mask.get_at((x,y)) -> int

        Surfaceオブジェクトと同じように、開始位置となる( 0, 0)座標は画面の左上になります。



      Mask.set_at
        Maskオブジェクト上の、引数に指定した(x,y)座標にビットフラグを設定します。
        Mask.set_at((x,y),value)
         

      Mask.overlap
        Maskオブジェクトをオフセット値を加えた上で比較し、ビットフラグ座標が重複している場合はその重複位置を戻り値として返します。 - 重複していない場合はNone値を戻り値として返します。
        Mask.overlap(othermask, offset) -> (x,y)

        オフセットを指定すると、下記のように指定分の座標をずらした上で重複位置を調べます。(オフセットにはマイナスの値も設定できます。):

           +----+----------..
           |A   | yoffset
           |  +-+----------..
           +--|B
           |xoffset
           |  |
           :  :
        


      Mask.overlap_area
        重複している'ピクセル'座標の数を戻り値として返します。
        Mask.overlap_area(othermask, offset) -> numpixels

        引数として渡した別のmaskオブジェクトと比較し、重複するピクセル座標の数を調べることができます。この命令を使用して、二つのMaskオブジェクトの衝突の向きや衝突している数を調べることができます。有限差分法を使って衝突範囲の傾斜を計算することで、衝突近似を調べることもできます。

         dx = Mask.overlap_area(othermask,(x+1,y)) - Mask.overlap_area(othermask,(x-1,y))
         dy = Mask.overlap_area(othermask,(x,y+1)) - Mask.overlap_area(othermask,(x,y-1))
        


      Mask.overlap_mask
        ピクセルの重複している座標を抽出してMaskオブジェクトを作り、戻り値として返します。
        Mask.overlap_mask(othermask, offset) -> Mask

        Maskオブジェクトと他のMaskオブジェクトを比較し、ピクセルが重複している座標を抽出してMaskオブジェクトを作成します。作成されたMaskオブジェクトの大きさは、元のMaskオブジェクトと変わりません。



      Mask.fill
        全てのビットを1に設定します。
        Mask.fill()

        Maskオブジェクトの全てのピクセルにビットフラグを設定します。



      Mask.clear
        全てのビットを0に設定します。
        Mask.clear()

        Maskオブジェクトの全てのピクセルのビットフラグを削除します。



      Mask.invert
        Maskオブジェクトの全てのビットを反転させます。
        Mask.invert()

        Maskオブジェクトのビットを反転させます。ビットフラグが立っているピクセルはフラグが解除され、ビットフラグが立っていないピクセルはフラグが設定されます。



      Mask.scale
        Maskオブジェクトの大きさを変更します。
        Mask.scale((x, y)) -> Mask

        指定した大きさのMaskオブジェクトを新規に作成し、戻り値として返します。



      Mask.draw
        別のMaskオブジェクトのビットフラグ情報を重ね書きします。
        Mask.draw(othermask, offset)
        ビット単位でOR処理を実行し、別のMaskオブジェクトのビットフラグ情報を重ね書きします。

      Mask.erase
        別のMaskオブジェクトを基にして、ビットフラグ情報を削除します。
        Mask.erase(othermask, offset)

        別のMaskオブジェクトにビットフラグが設定されている場合、同じ位置のビットフラグを全て削除します。



      Mask.count
        ビットフラグが設定されているピクセルの数を戻り値として返します。
        Mask.count() -> pixels

        Maskオブジェクトで、ビットフラグが設定されているピクセルの数を戻り値として返します。



      Mask.centroid
        Maskオブジェクトに記録されているピクセルの重心となる位置を戻り値として返します。
        Mask.centroid() -> (x, y)

        Maskオブジェクトに記録されているピクセルの重心となる位置を調べます。重心位置はタプル型の値として取得されます。実行時にMaskオブジェクトが空の場合は、(0,0)の値が取得されます。



      Mask.angle
        ピクセルの向きを戻り値として返します。
        Mask.angle() -> theta

        画像上のフラグが設定されているピクセルのおおよその向きを、-90度から90度の範囲内で調べます。ピクセルの位置が連なっている場合に、この命令は最も効果的に動きます。Maskオブジェクトが空の場合は、0.0の値が取得されます。



      Mask.outline
        ピクセルが連なっている範囲の輪郭を表す座標一覧
        Mask.outline(every = 1) -> [(x,y), (x,y) ...]

        Maskオブジェクト上で最初に検出されたピクセル連結範囲について、その輪郭を現す座標一覧を戻り値として返します。Maskオブジェクト上にピクセルが連なっている範囲がある場合にのみ、この命令は有効でしょう。任意に設定できるevery引数を使うことで、ピクセルを一定数飛ばして輪郭を作ることもできます。例えば引数に10と設定すると、10個ごとのピクセル座標の一覧が戻り値として返ります。



      Mask.convolve
        Maskオブジェクトと別のMaskオブジェクトの畳み込み積分を戻り値として返します。
        Mask.convolve(othermask, outputmask = None, offset = (0,0)) -> Mask

        Returns a mask with the (i-offset[0],j-offset[1]) bit set if shifting othermask so that it's lower right corner pixel is at (i,j) would cause it to overlap with self.

        outputmask引数が設定されている場合は、引数として渡したMaskオブジェクトにビットフラグ情報が上書きされ、戻り値として返ります。outputmask引数を設定しなかった場合はMaskオブジェクトが新規に作成されます。作成されたMaskのサイズは、横幅が「元Maskの横幅 + othermaskの横幅 - 1」、高さが「元Maskの高さ + othermaskの高さ - 1」となります。



      Mask.connected_component
        ピクセルが連なっている範囲を基に、Maskオブジェクトを作成します。
        Mask.connected_component((x,y) = None) -> Mask

        SAUFアルゴリズムを使用して、Maskオブジェクト上でピクセルが連なっている範囲を調べます。この命令では、8点のピクセルが連なっているかどうかをチェックします。既定では、画像の中で最も大きい連結範囲が戻り値として返ります。追加で特定のピクセル位置座標を指定することもでき、そうすることで指定座標を含んだ連結範囲を取得することができます。その場合、指定した座標が連結範囲に含まれていないと、空のMaskオブジェクトが戻り値として返ります。作成されたMaskオブジェクトの大きさは、元のMaskオブジェクトと同じものになります。

        ※「この命令では、8点のピクセルが連なっているかどうかをチェックします(It checks 8 point connectivity)」と記載されていますが、1点のみの場合でも連結範囲として検出されるようです。



      Mask.connected_components
        ピクセルが連なっている範囲を基に、Maskオブジェクトの一覧を作成します。
        Mask.connected_components(min = 0) -> [Masks]

        ピクセルが連なっている範囲を基に、Maskオブジェクトの一覧を作成します。連結範囲を検出する際の最小のピクセル数を引数に設定することで、細かいノイズを除外することができます。



      Mask.get_bounding_rects
        ピクセルが連なっている範囲の外枠部分の一覧を、rectオブジェクト型の戻り値として返します。
        Mask.get_bounding_rects() -> Rects

        ビットフラグの設定されたピクセルが連なっている範囲の、外枠部分をRect型の値として取得します。取得された外枠の形状は、ピクセルの連なりが全て中に入る大きさになります。



トップへ戻る Cdrom || Color || Cursors || Display || Draw || Event || Examples || Font || Gfxdraw || Image || Joystick || Key || Locals || Mask || Mixer || Mouse || Movie || Music || Overlay || Pixelarray || Pygame || Rect || Scrap || Sndarray || Sprite || Surface || Surfarray || Tests || Time || Transform