Visual Basic でOpenCV⑬ - オブジェクト・コーナー検出

Visual BasicOpenCVを使用し、コーナーの検出を行うプログラムを紹介します。

コーナー検出

画像に含まれるコーナーを検出します。フォームはVisual BasicOpenCV⑪ - アフィン変換フリップで使用したものと同じです。当該プログラムと異なるのは、派生クラスのCCvFunc.vb のみです。CCvFunc.vbのDoCvFunctionメソッドのソースリストを示します。

Public Function DoCvFunction() As Drawing.Bitmap
    Using gray = New Mat()
        Cv2.CvtColor(mSrc, gray, ColorConversionCodes.BGR2GRAY)

        Const maxCorners = 50, blockSize = 3
        Const qualityLevel = 0.01, minDistance = 20.0, k = 0.04
        Const useHarrisDetector = False
        Dim corners As Point2f() = Cv2.GoodFeaturesToTrack(gray, maxCorners, _
            qualityLevel, minDistance, New Mat(), blockSize, useHarrisDetector, k)
        mDst = mSrc.Clone()
        For Each it As Point2f In corners
            Cv2.Circle(mDst, CType(it, OpenCvSharp.Point), 4, Scalar.Blue, 2)
        Next
    End Using
    Return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mDst)
End Function

Cv2.CvtColor メソッドで画像をカラーからグレイスケールに変換します。この画像の強いコーナーをCv2.GoodFeaturesToTrack メソッドを用いて検出します。第7 引数にFalse を与え固有値を計算し、強いコーナーを検出します。この例では、上位50 個のコーナーを検出します。最後に、Cv2.Circle メソッドで検出したコーナー位置に円を描画します。

実行

以降に、コーナーを検出した例を示します。