Hey Folks! この記事では、PythonのOpenCVパッケージを使って、画像中のコーナーを特定する方法を教えます。
コーナー検出の紹介
コーナーとは、その局所的な近辺にある2つのエッジの方向が支配的で反対である場所です。
言い換えれば、コーナーは2つのエッジの交差点と定義することができ、エッジは画像の明るさの急激な変化を表している。
1
2
3
|
import numpy as np
import cv2
from matplotlib import pyplot as plt
|
コーナーは画像の最も本質的な部分であり、平行移動、回転、照明の影響を受けないため、関心点と呼ばれることもある。
Pythonでコーナー検出を実装する
ステップ1:必要なモジュール/ライブラリのインポート
1
2
3
4
5
|
img = cv2.imread( 'sample_shape1.png' )
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.figure(figsize = ( 10 , 10 ))
plt.imshow(img) plt.show() |
ステップ 2: 画像の読み込みとグレー画像への変換
次のステップでは,cv2.imread 関数を用いて画像を読み込みます.この関数は,読み込む必要がある画像のパスを受け取ります.また,処理を簡単にするために,関数 cv2.cvtColor を用いて画像をグレー画像に変換します.
この画像は,matplotlib ライブラリの plt.imshow メソッドを使って表示されます.
1
2
|
corners = cv2.goodFeaturesToTrack(gray, 27 , 0.01 , 10 )
corners = np.int0(corners)
|
1
2
3
4
5
6
7
|
for i in corners:
x, y = i.ravel()
cv2.circle(img, (x, y), 4 , 200 , - 1 )
plt.figure(figsize = ( 10 , 10 ))
plt.imshow(img) plt.show() |
ステップ 3: 画像のコーナーの検出
cv2.goodFeaturesToTrack() 関数は,Shi-Tomasi 法を用いて,画像中の最も強い N 個のコーナーを決定します.
ステップ 4: コーナーポイントのプロット
各コーナーには、後述のコードスニペットを用いて単純な赤い点をプロットすることを目指します。
そして最後のセクションでは、最終的なコーナー検出画像をプロットします。
サンプル出力2
まとめ
OpenCV を使って画像の角を検出する Python プログラムを作る方法を学びました。
このチュートリアルは気に入りましたか?いずれにせよ、以下のチュートリアルをご覧になることをお勧めします。
- PythonによるORB特徴検出
- Pythonを使った色検出 – 初心者向けリファレンス
- Python 輪郭の検出
- Pythonを使った画像中のエッジ検出
お時間を割いていただき、ありがとうございました 何か新しいことを学べたでしょうか!
この記事もチェック:PythonとOpenCVを使って画像のエッジ検出をする方法