OpenCVSharp 4.5 Harris角点检测

用 OpenCVSharp4.5 跑一遍 OpenCV 官方教程。

原 OpenCV 官方教程链接: OpenCV: Harris corner detector

核心函数:cv::cornerHarris 

using System;
using OpenCvSharp;

namespace ConsoleApp1
{
    class tutorial43 : ITutorial
    {
        static int thresh = 200;
        static int max_thresh = 255;
        Mat src = new Mat();
        Mat src_gray = new Mat();
        public void Run()
        {


            src = Cv2.ImRead(@"I:\csharp\images\building2.jpg");
            if (src.Empty())
            {
                Console.WriteLine("Could not open or find the image!");
                return;
            }

            Cv2.CvtColor(src, src_gray, ColorConversionCodes.BGR2GRAY);
            Cv2.NamedWindow("Source", WindowFlags.Normal);
            Cv2.CreateTrackbar("Threshold", "Source", ref thresh, max_thresh, cornerHarris_demo);
            Cv2.ImShow("Source", src);
            cornerHarris_demo(0, IntPtr.Zero);
            Cv2.WaitKey();
        }
        void cornerHarris_demo(int pos, IntPtr userdata)
        {
            int blockSize = 2;
            int apertureSize = 3;
            double k = 0.04;
            Mat dst = Mat.Zeros(src.Size(), MatType.CV_32FC1);
            Cv2.CornerHarris(src_gray, dst, blockSize, apertureSize, k);
            Mat dst_norm = new Mat();
            Mat dst_norm_scaled = new Mat();
            Cv2.Normalize(dst, dst_norm, 0, 255, NormTypes.MinMax, MatType.CV_32FC1, new Mat());
            Cv2.ConvertScaleAbs(dst_norm, dst_norm_scaled);
            for (int i = 0; i < dst_norm.Rows; i++)
            {
                for (int j = 0; j < dst_norm.Cols; j++)
                {
                    if ((int)dst_norm.At<float>(i, j) > thresh)
                    {
                        Cv2.Circle(dst_norm_scaled, j, i, 5, new Scalar(0), 2, LineTypes.Link8, 0);
                    }
                }
            }
            Cv2.NamedWindow("Corners");
            Cv2.ImShow("Corners", dst_norm_scaled);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值