はじめに
OpenCVとはインテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリで、画像処理・画像解析および機械学習等の機能を持つC/C++、Java、Python、MATLAB用ライブラリとなっています。
Opencvには以下のような機能があります。
- グレースケール化
- 2値化
- 輪郭の検出
- 顔検出
- ノイズ除去
- テンプレートマッチング
OpenCVの機能にコーナー検出という手法があり、コーナー検出は動き検出,画像マッチング,画像追跡などで活用されています。
本記事では、OpenCVを用いた画像のコーナー検出の方法について紹介します。
1. 本記事で使用する画像
本記事で使用する画像は以下の黒色背景に白色の三角形、四角形、五角形、六角形、円がある画像です。
2. コーナー検出
コーナー検出にはcv2.goodFeaturesToTrack()を用います。cv2.goodFeaturesToTrack()は以下の様に用います。
cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance, blockSize=***, useHarrisDetector=***, k=***)
cv2.goodFeaturesToTrack()の引数は以下の表のようになります。
引数 | 内容 |
---|---|
image | 対象の画像 |
maxCorners | 検出するコーナーの最大数 |
qualityLevel | コーナーの最低限許容される品質を特徴付けるパラメータ。0~1の値 |
minDistance | 検出したコーナー間の最小のユークリッド距離 |
blockSize | 微分共分散行列を計算するための平均ブロックのサイズ |
useHarrisDetector | Harris検出器を使用するかどうかを示すパラメーター |
k | Harris検出器の自由パラメータ(Harris検出器を使用する場合) |
Harrs検出器を使いたい場合には、useHarrisDetector=Trueにし、kに値を設定してください。
本記事では、コーナー検出後にコーナーを赤い円で印をつけます。その円を描画するにはcv2.circle()を用います、cv2.circle()は以下の様に用います。
img = cv2.circle(img, center, radius, color, thickness)
cv2.circle()の引数は以下の表のようになります。
引数 | 内容 |
---|---|
img | 円を描画したい画像 |
center | 描画したい円の中心位置 |
radius | 描画したい円の半径 |
color | 描画したい円の色 |
thickness | 描画したい円の太さ。負の場合、中塗り。 |
それでは、cv2.goodFeaturesToTrack()を用いてコーナーを検出し、検出したコーナーにcv2.circle()で円を描画していきます。以下の例では、検出するコーナーの最大値は40、ブロックサイズは3、コーナーの検出品質パラメータは0.2、最小のユークリッド距離は5に設定してコーナーを検出し、検出したコーナーに半径6、太さ2、赤色の円を描画します。
出力結果は以下の様になります。コーナーに円が描かれていますね。適当にパラメータを設定した際には描画できませんでしたが、調整することですべてのコーナーで円を描画できました。
オススメ書籍
Pythonで始めるOpenCV4プログラミング
実践OpenCV4 for Python 画像映像情報処理と機械学習
スキル修得&転職
近年、DXの進展に伴うデジタル人材の需要の高まりに追いついていない状況が続いていると経済産業省がホームページで記載している通り、DX人材、IT人材が不足しているのが現状です。さらにコンピュータの性能向上やAI技術の発展により、よりDX人材、IT人材の需要が高まってきます。さらには、今後の長期間安定して職がある業種とも考えられます。
以下の求人では、IT業界の転職や、IT未経験だけどIT人材を志望する就活を支援してくれます。無料で会員登録もできるので、まずは登録だけでもして様子を見てみてはいかがでしょうか?
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
おわりに
OpenCVを用いた画像のコーナー検出の方法について紹介しました。動き検出,画像マッチング,画像追跡などを実施したい方はまずはこのコーナー検出を実施できるようになりましょう。