このページではPython-openCVを使って、以下の動画ようにクリックで選択した領域に対して、
以下のようにマスク処理を実施する方法をご紹介していきます。
それではさっそくやっていきましょう!
使用するライブラリ一覧
今回は以下の2つのライブラリを使用していきます。
★Numpy
★openCV
インストールしていない場合はまずはインストール作業から進めましょう。
openCVについては以下でインストール方法&使用する際のポイントを紹介していますので、興味があればこちらもあわせてご覧ください。
【Python-OpenCV】インストール方法、バージョン確認、使用時の注意点
クリックで選択した領域をマスク処理するサンプルコード
それでは準備がととのったら実際のコーディングに入っていきましょう。
いきなりですが、以下が冒頭に紹介した処理を実施できるサンプルコードです。
(今回はプログラム実行フォルダ内にあるsample.jpgという画像ファイルに対して処理を実施する形で書いています。)
import cv2
import numpy as np
#読み込むファイル名を指定
file_name='sample.jpg'
#マスク用の輪郭抽出関数
def make_mask(event, x, y, flags, params):
global counter,x0,y0,x1,y1,img2,contour_list
if event == cv2.EVENT_LBUTTONDOWN and counter==0:
counter=1
img2 = np.copy(img)
contour_list=[]
cv2.circle(img2,center=(x,y), radius=5, color=0, thickness=-1)
x0,y0=x,y
x1,y1=x,y
cv2.imshow('window', img2)
contour_list.append([x0,y0])
elif event == cv2.EVENT_MOUSEMOVE and counter==1:
img3=np.copy(img2)
cv2.line(img3,(x1,y1),(x,y), color=0, thickness=2, lineType=cv2.LINE_4)
cv2.imshow('window', img3)
elif event == cv2.EVENT_LBUTTONDOWN and counter==1:
cv2.line(img2,(x1,y1),(x,y), color=0, thickness=2, lineType=cv2.LINE_4)
cv2.circle(img2,center=(x,y), radius=5, color=0,thickness=-1)
x1,y1=x,y
cv2.imshow('window', img2)
contour_list.append([x1,y1])
elif event == cv2.EVENT_RBUTTONDOWN :
cv2.line(img2,(x1,y1),(x0,y0), color=0, thickness=2, lineType=cv2.LINE_4)
cv2.imshow('window', img2)
counter=0
#マスク用の輪郭抽出処理
img=cv2.imread(file_name,cv2.IMREAD_GRAYSCALE)
counter=0
cv2.imshow('window', img)
cv2.setMouseCallback('window', make_mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
#もとの画像にマスク処理を実施
contour_list=[np.array(contour_list)]
cv2.drawContours(img, contour_list, 0, 255, -1)
cv2.imwrite('mask_img.jpg',img)
サンプルコードの使い方
それではサンプルコードの使い方をご紹介します。
先ほどのプログラムを実行すると、まずはあなたが指定した画像が新しいWindowとして出現するはずです。
そのWindow内において、
①マスク処理を開始したい点を左クリック
②マスク処理を行いたい領域を連続で左クリックしていく
③領域選択が終わったら右クリック
⇒右クリックすると最後の点と始点を自動的に結ばれます。
④選択した領域で問題なければ、キーボードをどこか押して終了する
⑤再度選択しなおしたい場合は①からやり直す
④の処理が実行された時点でフォルダ内にマスク後の画像が保存されています。
冒頭で紹介した動画を再掲しておきます。
上の動画では、10回左クリックして最後に1回右クリックしています。
まぁ一度やってみれば慣れると思います。
おわりに
というわけで今回はpython-openCVを使って、画像内でクリックした領域に対してマスク処理を行う方法をご紹介しました。
画像処理の際などにぜひご活用ください。
このように、私のブログでは様々なスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村
それではまた!
Follow @HigashiSalary
コメント