【python-openCV】画像の指定位置に円形マスクをつける方法!

f:id:yshgs_elec:20210306213328p:plain

 

この記事ではpythonを使って、ある画像から指定した位置に円のマスキングを施す方法ご紹介します。

f:id:yshgs_elec:20210306212245j:plain

 みかんの画像を使って実演していきますので、ぜひあなたも何かの画像を使って一緒にやってみましょう。 

 

それでは早速やっていきます!

 

スポンサーリンク

必要なライブラリ

◆openCV:Ver.4.5.1.48

◆numpy:Ver.1.19.5

バージョンは参考情報です。

おそらくバージョンが違っても動作するはずです。 

 

インストールしていない場合は、インストールしておきましょう。

やりかたはググればすぐに出てきます。

スポンサーリンク

円形マスキングを行うサンプルコード

下準備が整ったところで、早速コードを記述していきましょう。

以下が指定位置に任意の大きさの円でマスキングを行うサンプルコードです。

#ライブラリインポート
import cv2
import numpy as np
#マスキング領域を指定
x=400 #pixel
y=400 #pixel
r=300 #pixel
#画像の読み込み
pic=cv2.imread('mikan.jpg',cv2.IMREAD_COLOR)
h,w=pic.shape[:2]
#マスキング
mask=np.zeros((h,w),dtype=np.uint8)
cv2.circle(mask,center=(x,y),radius=r,color=255,thickness=-1)
pic[mask==0] = [0, 0, 0]
#画像出力
cv2.imwrite('circle.jpg',np.array(pic))

 

マスキングを行うにあたっては重要な項目が2つありますので、それらを詳細解説しておこうと思います。

 

◆コードのポイント解説①マスキング用の配列を準備する

まずはじめに、以下の2行のコードでマスキングを行うための配列を準備しています。

mask=np.zeros((h,w),dtype=np.uint8)

⇒マスキングを行う画像と全く同じ大きさ(縦、横ピクセル数)で、すべての要素にゼロが配置されている配列を準備する。
cv2.circle(mask,center=(x,y),radius=r,color=255,thickness=-1)

⇒先ほどつくったゼロ(真っ黒)だけの配列に対して、指定した位置、半径の円形領域内を255(真っ白)にする。

また、円の座標指定は横方向(x)、縦方向(y)の順番です。

配列処理をしているとどうしても行、列の順番で考えてしまって間違えやすいのでご注意ください。

 

ここまでの配列を画像にすると以下のようなものが出来上がっています。

※実際は配列を準備するだけで、画像を出力する必要はありません。

f:id:yshgs_elec:20210306211128j:plain

 

◆コードのポイント解説②マスキング用配列を参考にもとの画像を加工する

次に、先ほどつくった配列(変数mask)をもとに、もと画像を加工します。

該当するコードは以下です。

pic[mask==0] = [0, 0, 0]

※今回は、もとの画像の配列はpicという名前で取り扱っています。

このコードをもう少し詳細に解説すると、maskという配列内の数値がゼロになっている座標は、picという配列の3要素(B,G,R)をゼロにしろ、という指示を行っています。

 

マスキングと聞くと、もとの画像に別の画像を重ねるような作業をイメージしてしまうかもしれませんが、このコード中ではそんなことはやっていないということです。

 

スポンサーリンク

サンプルコードの実行結果

というわけで最後に先ほど紹介したサンプルコードを実行してみましょう。

※実行前にコードを記述したファイルと同じフォルダに画像が入っていることを確認しておきましょう。

 

プログラムを実行した結果、以下の画像のようにもとの画像から指定部分以外をマスキングした画像が出力されていることが確認できました。

f:id:yshgs_elec:20210306212228j:plain

 

スポンサーリンク

おわりに

というわけで今回はpythonを使って、ある画像に対して、指定円でマスキングを行う方法をご紹介しました。

なにかの参考になれば幸いです。

 

このように私のブログでは様々なプログラミングスキルを紹介しています。

・もっと革新的なことをやりたい。

・プログラミングについてもっと詳しくなりたい。

こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。

 

この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

 ↓ 応援ボタン

にほんブログ村 IT技術ブログへ
にほんブログ村

 

それではまた!

 

コメント

タイトルとURLをコピーしました