.Net AI学习笔记系列第七章 OpenCVSharp实操——角点检测

.Net AI学习笔记系列

第七章 OpenCVSharp实操——角点检测



前言

本文主要介绍角点检测,角点检测(Corner Detection)是计算机视觉和图像处理中的一个重要任务,它的目的是在数字图像中识别出具有显著特征的点,这些点通常位于图像中物体的边缘或角落。角点检测在许多应用中都有重要作用,如运动跟踪、图像拼接、目标识别等。


一、OpenCVSharp实操——角点检测

从人眼来看,角点是图像亮度发生剧烈变化的点 或 边缘曲线上曲率为极大值的点。OpenCV 中 Harris 角点检测的函数为:
void cornerHarris (
InputArray src, // 输入图像 (单通道,8位或浮点型)
OutputArray dst, // 输出图像 (类型 CV_32FC1,大小同 src)
int blockSize, // 邻域大小
int ksize, // Sobel 算子的孔径大小
double k, // 经验参数,取值范围 0.04 ~ 0.06
int borderType = BORDER_DEFAULT // 边界模式
)

二、步骤

1.开发工具

	VS2019+.net 4.8+OpenCvSharp4

2.引入库

Install-Package OpenCvSharp4

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
using OpenCvSharp.Extensions;

3.示例代码

代码如下(示例):

		//角点检测
        private void button1_Click(object sender, EventArgs e)
        {
            // 读取图像
            Mat src = BitmapConverter.ToMat((Bitmap)this.pictureBox1.Image);

            //灰度化图像
            Mat grayImg = new Mat();
            Cv2.CvtColor(src, grayImg, ColorConversionCodes.BGR2GRAY);

            //Cv2.ImShow("灰度图像", grayImg);

            // Harris 角点检测参数
            int kThresh = 50;
            int kBlockSize = 3;
            int kApertureSize = 3;
            double k = 0.04;

            // 进行 Harris 角点检测
            var dst = new Mat();
            Cv2.CornerHarris(grayImg, dst, kBlockSize, kApertureSize, k);

            // 归一化检测结果
            var dst_norm = new Mat();
            var dst_norm_scaled = new Mat();
            Cv2.Normalize(dst, dst_norm, 0, 255, NormTypes.MinMax, MatType.CV_32FC1);
            Cv2.ConvertScaleAbs(dst_norm, dst_norm_scaled);

            //Cv2.ImShow("归一化图像", dst_norm_scaled);

            // 描绘出检测出来的角点
            for (int y = 0; y < dst_norm.Rows; y++)
            {
                for (int x = 0; x < dst_norm.Cols; x++)
                {
                    int val = (int)dst_norm.At<float>(y, x);
                    if (val > kThresh)
                    {
                        Cv2.Circle(src, new OpenCvSharp.Point(x, y), 2, Scalar.Red, 5);
                    }
                }
            }

            //显示效果图
            this.pictureBox2.Image = BitmapConverter.ToBitmap(src);
            this.pictureBox2.Refresh();
        }

4.运行效果

在这里插入图片描述

总结

本文使用的是Harris角点检测:Harris算法是一种基于灰度图像的角点检测方法,它通过计算像素点周围区域的灰度变化来检测角点。Harris算法对于图像的旋转、缩放和光照变化具有较好的鲁棒性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

brooth123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值