この記事ではpythonを使って、ある画像から指定した位置に円のマスキングを施す方法ご紹介します。
みかんの画像を使って実演していきますので、ぜひあなたも何かの画像を使って一緒にやってみましょう。
それでは早速やっていきます!
※この作業をpythonというプログラミング言語を用いて実行していきます。インストールから始めたい方は以下からご覧ください。
必要なライブラリ
◆openCV:Ver.4.5.1.48
◆numpy:Ver.1.19.5
バージョンは参考情報です。
numpyはAnacondaを使用すればあらかじめインストールされていますが、openCVは自分で追加インストールが必要です。
openCVのインストール方法については以下の記事で解説しています。
円形マスキングを行うサンプルコード
下準備が整ったところで、早速コードを記述していきましょう。
以下が指定位置に任意の大きさの円でマスキングを行うサンプルコードです。
#ライブラリインポート
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)の順番です。
配列処理をしているとどうしても行、列の順番で考えてしまって間違えやすいのでご注意ください。
ここまでの配列を画像にすると以下のようなものが出来上がっています。
※実際は配列を準備するだけで、画像を出力する必要はありません。
◆コードのポイント解説②マスキング用配列を参考にもとの画像を加工する
次に、先ほどつくった配列(変数mask)をもとに、もと画像を加工します。
該当するコードは以下です。
pic[mask==0] = [0, 0, 0]
※今回は、もとの画像の配列はpicという名前で取り扱っています。
このコードをもう少し詳細に解説すると、maskという配列内の数値がゼロになっている座標は、picという配列の3要素(B,G,R)をゼロにしろ、という指示を行っています。
マスキングと聞くと、もとの画像に別の画像を重ねるような作業をイメージしてしまうかもしれませんが、このコード中ではそんなことはやっていないということです。
サンプルコードの実行結果
というわけで最後に先ほど紹介したサンプルコードを実行してみましょう。
※実行前にコードを記述したファイルと同じフォルダに画像が入っていることを確認しておきましょう。
プログラムを実行した結果、以下の画像のようにもとの画像から指定部分以外をマスキングした画像が出力されていることが確認できました。
おわりに
というわけで今回はpythonを使って、ある画像に対して、指定円でマスキングを行う方法をご紹介しました。
なにかの参考になれば幸いです。
このように、私のブログでは様々なプログラミングスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント