opencvsharp角点检测

  Mat mat1 = new Mat(@"棋盘格.jpg",ImreadModes.Grayscale);

            #region shi_tomasi角点检测
            //shi_tomasi角点检测
            Point2f[] cornersPoint = Cv2.GoodFeaturesToTrack(mat1, 100, 0.01, 30, new Mat(), 3, false, 0.04);
            foreach (var item in cornersPoint)
            {
                Cv2.Circle(mat1, Convert.ToInt16(item.X), Convert.ToInt16(item.Y), 10, Scalar.Black, 2);
                Console.WriteLine(item);
            }
            #endregion         
            #region 亚像素级角点检测
            //这里准备亚像素级角点检测的参数
            //Size winSize = new Size(21, 21);   // 搜索矩形大小的一半,类似于渲染的小方格
            //Size zeroZone = new Size(-1, -1);    //这里是死区的一半尺寸,(-1,-1表示没有死区)
            //List inputCorners = new List();  //这里是输入角的初始坐标和提供的细化坐标(类似扫描)
            //for (int i = 50; i < mat1.Rows - 60; i += 40)   //给inputCorners 矩阵赋值
            //{
            //    for (int j = 50; j < mat1.Cols - 50; j += 40)
            //    {
            //        inputCorners.Add(new Point(j, i));
            //    }
            //}
            //TermCriteria criteria = new TermCriteria(CriteriaType.Eps, 100, 0.01);   //这个是检测数据
            ////这里开始检测角点
            //Point2f[] y_cornersPoint = Cv2.CornerSubPix(mat1, inputCorners, winSize, zeroZone, criteria);
            ////遍历画出角点
            //foreach (var item in y_cornersPoint)
            //{
            //    Cv2.Circle(mat1, Convert.ToInt16(item.X), Convert.ToInt16(item.Y), 10, Scalar.Black, 2);
            //    Console.WriteLine(item);
            //}
            #endregion
            #region FAST角点算子
            ////  FAST角点算子具有平移和旋转不变性、可靠性高、对噪声鲁棒性好、计算量小 这里不一定能拿到全部角点。
            //KeyPoint[] keyPoint = Cv2.FAST(mat1, 150);
            //foreach (var item in keyPoint)
            //{
            //    Cv2.Circle(mat1, Convert.ToInt16(item.Pt.X), Convert.ToInt16(item.Pt.Y), 10, Scalar.Black, 2);
            //    Console.WriteLine(item);
            //}
            //// 遍历画出角点
            //foreach (var item in cornersPoint)
            //{
            //    Cv2.Circle(mat1, Convert.ToInt16(item.X), Convert.ToInt16(item.Y), 10, Scalar.Black, 2);
            //    Console.WriteLine(item);
            //}    
            #endregion

            Cv2.ImShow("mat1", mat1);
            Cv2.WaitKey();

shi_tomasi角点检测结果

opencvsharp角点检测_第1张图片
这里是亚像素级角点检测
opencvsharp角点检测_第2张图片
FAST角点算子
opencvsharp角点检测_第3张图片

你可能感兴趣的:(opencvsharp)