OpenCVの基本を学ぶことから始め、次に画像の基本的な画像処理と操作を行い、続いて画像のセグメンテーションとOpenCVとPython言語を使用した他の多くの操作を行いました。ここで、このセクションでは、テンプレートマッチングを使用していくつかの簡単なオブジェクト検出手法を実行します。画像内のオブジェクトを見つけて、その特徴を説明します。特長は、コーナーのような画像の一般的な属性であり、我々はまた、いくつかの共通のを見て、のような人気のオブジェクト検出アルゴリズムになるなどのエッジSIFT、SURF、FAST、BREIF&ORB。
前のチュートリアルで説明したように、 OpenCVはオープンソースのCommuter Vision Library であり、C ++、Python、およびJavaインターフェイスを備え、Windows、Linux、Mac OS、iOS、およびAndroidをサポートしています。そのため、PythonおよびLinux環境のRaspberryPiに簡単にインストールできます。また、OpenCVとカメラが接続されたRaspberry Piを使用して、顔検出、顔ロック、オブジェクトトラッキング、車のナンバープレート検出、ホームセキュリティシステムなど、多くのリアルタイム画像処理アプリケーションを作成できます。
オブジェクトの検出と認識は、コンピュータビジョンの最も重要なユースケースであり、次のような強力なことを行うために使用されます。
- シーンのラベル付け
- ロボットナビゲーション
- 自動運転車
- 身体認識(Microsoft Kinect)
- 病気と癌の検出
- 顔認識
- 手書き認識
- 衛星画像内のオブジェクトの識別
物体検出VS認識
物体認識は、コンピュータが画像内の複数の物体から物体を認識し、それを識別できる可能性がある物体検出の第2レベルです。
次に、いくつかの画像処理機能を実行して、画像からオブジェクトを見つけます。
画像からオブジェクトを見つける
ここでは、画像内の文字/オブジェクトを見つけるためにテンプレートマッチングを使用し、そのオブジェクトを見つけるためにOpenCVの cv2.matchTemplate() 関数を使用します
import cv2 import numpy as np
入力画像を読み込んで灰色に変換します
image = cv2.imread( 'WaldoBeach.jpg') cv2.imshow( 'people'、image) cv2.waitKey(0) gray = cv2.cvtColor(image、cv2.COLOR_BGR2GRAY)
テンプレート画像を読み込む
template = cv2.imread( 'waldo.jpg'、0) #画像上のオブジェクトのテンプレートマッチングの 結果result = cv2.matchTemplate(gray、template、cv2.TM_CCOEFF) sin_val、max_val、min_loc、max_loc = cv2.minMaxLoc(結果)
バウンディングボックスを作成する
top_left = max_loc #外接する四角形のサイズを50ピクセル 増やしますbottom_right =(top_left + 50、top_left + 50) cv2.rectangle(image、top_left、bottom_right、(0,255,0)、5) cv2.imshow( 'object found' 、画像) cv2.waitKey(0) cv2.destroyAllWindows()
で cv2.matchTemplate(灰色、テンプレート、cv2.TM_CCOEFF) 、入力オブジェクト及びテンプレートを見つけるためにグレースケール画像。次に、画像からオブジェクトを見つけるためのテンプレートマッチング方法を適用します。ここでは、 cv2.TM_CCOEFF が使用されます。
関数全体は、テンプレートマッチング手順の結果であるresultに入力された配列を返します。
次に、 cv2.minMaxLoc(result) を使用します。これは、画像内でオブジェクトが見つかった座標または境界ボックスを提供し、それらの座標を取得したら、その上に長方形を描画し、ボックスの寸法を少し伸ばして、オブジェクトは長方形の中に簡単に収まります。
テンプレートマッチングを実行するにはさまざまな方法がありますが、この場合、相関係数を表す cv2.TM_CCOEFF を使用しています。
ここで、キーポイントは、シフト検出器を使用して抽出され、cv2描画キーポイント関数を使用して画像上に描画された(X、Y)座標です。
サーフ
import cv2 import numpy as np image = cv2.imread( 'paris.jpg') gray = cv2.cvtColor(image、cv2.COLOR_BGR2GRAY)
SURF Feature Detectorオブジェクトを作成します。ここでは、ヘシアンしきい値を500に設定します。
surf = cv2.xfeatures2d.SURF_create(500) キーポイント、記述子= surf.detectAndCompute(gray、None) print( "検出されたキーポイントの数:"、len(keypoints))
入力画像に豊富なキーポイントを描画します
image = cv2.drawKeypoints(image、keypoints、None、flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow( 'Feature Method-SURF'、image) cv2.waitKey() cv2.destroyAllWindows()
コンソール出力:
速い
import cv2 import numpy as np image = cv2.imread( 'paris.jpg') gray = cv2.cvtColor(image、cv2.COLOR_BGR2GRAY)
FASTDetectorオブジェクトを作成します
fast = cv2.FastFeatureDetector_create() #キーポイントを取得します。デフォルトでは非最大抑制はオンです #オフに設定しますfast.setBool( 'nonmaxSuppression'、False) keypoints = fast.detect(gray、None) print( "キーポイントの数検出: "、len(keypoints))
入力画像に豊富なキーポイントを描画します
image = cv2.drawKeypoints(image、keypoints、None、flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow( 'Feature Method-FAST'、image) cv2.waitKey() cv2.destroyAllWindows()
コンソール出力:
簡単な説明
import cv2 import numpy as np image = cv2.imread( 'paris.jpg') gray = cv2.cvtColor(image、cv2.COLOR_BGR2GRAY)
FAST検出器オブジェクトを作成します
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
Briefエクストラクタオブジェクトを作成する
#brief = cv2.DescriptorExtractor_create( "BRIEF") #キーポイントを決定 keypoints = fast.detect(gray、None)
Briefを使用して記述子と新しい最終キーポイントを取得する
キーポイント、記述子= brief.compute(gray、keypoints) print( "検出されたキーポイントの数:"、len(keypoints))
入力画像に豊富なキーポイントを描画します
image = cv2.drawKeypoints(image、keypoints、None、flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)cv2.imshow( 'Feature Method-BRIEF'、image)cv2.waitKey()cv2.destroyAllWindows()
コンソール出力:
ORB
import cv2 import numpy as np image = cv2.imread( 'paris.jpg') gray = cv2.cvtColor(image、cv2.COLOR_BGR2GRAY)
ORBオブジェクトを作成し、必要なキーポイントの数を指定できます
orb = cv2.ORB_create() #キーポイントを決定します keypoints = orb.detect(gray、None)
記述子を取得する
キーポイント、記述子= orb.compute(gray、keypoints) print( "検出されたキーポイントの数:"、len(keypoints))
入力画像に豊富なキーポイントを描画します
image = cv2.drawKeypoints(image、keypoints、None、flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow( 'Feature Method-ORB'、image) cv2.waitKey() cv2.destroyAllWindows()
コンソール出力:
最大5000のキーポイントの数を指定できますが、デフォルト値は500です。つまり、キーポイントの値が指定されていない場合、ORBは最適な500のキーポイントを自動的に検出します。
つまり、これがOpenCVでオブジェクト検出が行われる方法です。同じプログラムは、OpenCVがインストールされたRaspberry Piでも実行でき、Googleレンズを搭載したスマートフォンのようなポータブルデバイスとして使用できます。
この記事は、RajeevRatanによって作成されたUdemyのDeepLearningコースを使用したPythonのMasterComputerVision™OpenCV4から参照されています。購読して、ComputerVisionとPythonの詳細を確認してください。