17-OpenCVSharp 中实现 Halcon 的 Points_Harris算子(Harris 角点检测)

专栏地址:

《 OpenCV功能使用详解200篇 》

《 OpenCV算子使用详解300篇 》

《 Halcon算子使用详解300篇 》

内容持续更新 ,欢迎点击订阅


在 OpenCVSharp 中实现类似于 Halcon 中的 Points_Harris 算子,实际上就是实现 Harris 角点检测算法。Harris 角点检测算法是用于检测图像中的角点特征,可以用来进行图像匹配、物体识别等任务。Halcon 提供的 Points_Harris 函数是用来检测图像中的角点,并根据一定的阈值返回这些角点的坐标。

在 OpenCVSharp 中,Harris 角点检测的实现可以通过 cv::cornerHarris 函数来实现,它用于计算图像的 Harris 角点响应图,然后根据响应图来找到角点。

下面是使用 OpenCVSharp 实现类似 Halcon Points_Harris 功能的代码,并附上函数注释:

代码实现:

using OpenCvSharp;
using System;
using System.Collections.Generic;

public class HarrisCornerDetector
{
   
    /// 
    /// 实现 Harris 角点检测算法
    /// 
    /// 输入图像,必须为灰度图像
    /// 邻域大小,通常为 3 或 5
    /// Sobel算子使用的孔径大小,通常为 3 或 5
    /// Harris 检测的自由参数,通常设置为 0.04-0.06
    /// 角点响应的阈值,低于此阈值的点将被忽略
    /// 返回一个包含角点坐标的列表
    public static List<Point> DetectHarrisCorners(Mat image, int blockSize = 2, int ksize = 3, double k = 0.04, double threshold = 0.01)
    {
   
        // 检查输入图像是否为灰度图像
        if (image.Channels() != 1)
        {
   
            throw new ArgumentException("Input image must be a grayscale image.");
        }

        // 1. 计算 Harris 角点响应矩阵
        Mat harrisResponse = new Mat();
        Cv2.CornerHarris(image, harrisResponse, blockSize, ksize, k);

        // 2. 归一化响应图
        Mat harrisNorm = new Mat();
        Cv2.Normalize(harrisResponse, harrisNorm, 0, 255, NormTypes.MinMax, DepthType.Cv8U);

        // 3. 提取角点(根据阈值判断)
        List<Point> corners = new List<Point>();
        for (int y = 

你可能感兴趣的:(#,opencv,人工智能,计算机视觉,图像处理,矩阵)