Visual Basic とOpenCVを使用し、コーナーの検出を行うプログラムを紹介します。
コーナー検出
画像に含まれるコーナーを検出します。フォームはVisual Basic でOpenCV⑪ - アフィン変換のフリップで使用したものと同じです。当該プログラムと異なるのは、派生クラスの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 メソッドで検出したコーナー位置に円を描画します。
実行
以降に、コーナーを検出した例を示します。