C#调用OpenCvSharp实现图像的角点检测

news2024/9/19 17:30:51

  角点检测用于获取图像特征,以支撑运动检测、目标识别、图像匹配等方面的应用。常用的角点检测算法包括Kitchen-Rosenfeld算法、Harris算法、KLT算法、SUSAN算法等,本文学习并测试Harris角点检测算法。
  关于Harris算法的数学原理请见参考文献1的第18、19课,其总共花50分钟左右讲解算法数学原理。OpenCvSharp中Harris算法的函数原型如下:

public static void CornerHarris(InputArray src, OutputArray dst, int blockSize, int ksize, double k, BorderTypes borderType = BorderTypes.Reflect101)

  其中:
    -src,源图像,带检测角点的图像,一般为灰度图,Mat类型;
    -dst,保存角点检测几个,其类型和尺寸与src相同;
    -blockSize,邻域大小,详见参考文献3-4;
    -ksize,Sobel算子的孔径大小,只能取1、3、5、7(参考文献3);
    -k,权重系数,一般取0.04~0.06(参考文献1)。

  实际测试过程中,将角点检测结果归一化处理,然后检测超过指定阈值的位置,并在原图中标识,主要代码及程序运行效果如下所示:

using Mat imgSrc = Cv2.ImRead(lblMsg.Text);
using Mat imgGray = new Mat();
Cv2.CvtColor(imgSrc, imgGray, ColorConversionCodes.BGR2GRAY);

using Mat imgDest = new Mat(imgGray.Size(), MatType.CV_32FC1);

Cv2.CornerHarris(imgGray, imgDest, blockSize, ksize, k);

using Mat imgNorm =new Mat();
Cv2.Normalize(imgDest, imgNorm, 0, 255, NormTypes.MinMax);

for (int i = 0; i < imgNorm.Rows; i++)
{
    for (int j = 0; j < imgNorm.Cols; j++)
    {
        if (imgNorm.At<float>(i, j) > thrould)
        {
            Cv2.Circle(imgSrc, j, i, 5, color);
        }
    }
}

Cv2.ImShow("角点检测", imgSrc);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考文献:
[1]花12800买来的【OpenCV全套】教程,花费156个小时整理的OpenCV计算机视觉基础版全套视频教程,涵盖核心知识点,全程干货,无废话
[2]OpenCV3编程指南
[3]https://blog.csdn.net/holybin/article/details/40984955
[4]https://www.cnblogs.com/kbqLibrary/p/12482664.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1947729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解开基于大模型的Text2SQL的神秘面纱

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

【Unity国产化信创平台】虚拟机VMware Workstation Pro虚拟机下载安装

目录 一、虚拟机软件VMware Workstation Pro下载 二、虚拟机安装流程 1.傻瓜式安装 2.是否自动安装WHP 一、虚拟机软件VMware Workstation Pro下载 https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion 官网各种访问出错&#xff0c;下载界面总是…

linux禁用root

linux禁用root 1. 禁止普通用户切换到root1.1 sudo -i和sudo -s的区别1.2 sudo -i和直接登录root账号的区别1.3 禁止sudo -i切换root1.4 禁止su - root切换root 2. 禁止root远程登录2.1 ssh禁止root登录2.2 禁止远程桌面登录 本文主要介绍&#xff1a; 如何禁止普通用户切换到r…

划重点!PMP报考条件、报考步骤、考试内容、适合人群

参加PMP认证的好处&#xff0c;可以从几个方面来认识&#xff1a; 一、参加PMP认证与考试的过程&#xff0c;同时是一个系统学习和巩固项目管理知识的过程 二、参加PMP认证&#xff0c;您可以获得由PMI颁发的PMP证书 而拥有PMP认证表示你已经成为一个项目管理方面的专业人员…

基于微信小程序的健康饮食系统/健康饮食管理系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的小程序应运而生&#xff0c;各行各业相继进入信息管理时代&…

ST Stellar-E SR5E1 22KW OBC combo 3KW DC-DC汽车充电器解决方案

对于全球的环境保护意识抬头&#xff0c;全球的汽车产业慢慢步入电动化的时代&#xff0c;以减少碳排放。整车系统主要是由电池、电驱、电控的三电所构成&#xff0c;其中电池系统是整车的动力来源&#xff0c;而对电池充电的OBC系统更甚重要。一具高度安全性且高效的OBC系统&a…

a bean of type ‘org.redisson.api.RedissonClient Springboot 集成Redisson 配置

Springboot 集成 在导入redisson坐标之后 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.17.5</version></dependency> 使用注解注入示例 Resource private RedissonClient re…

QML鼠标右键菜单

原理非常简单&#xff0c;先写个Menu&#xff0c;通过MouseArea来填充需要右键菜单的区域。然后在onClicked信号中&#xff0c;让Menu的x、y等于当前鼠标的x、y&#xff0c;最后用调用Menu的open()方法将菜单在该位置显示出来。 import QtQuick import QtQuick.Controls.Mater…

【JDY-10M】蓝牙MESH

目录 一、实物图 二、原理图 引脚定义 三、简介 基本原理 产品特点 产品应用范围 出厂默认配置 应用 1&#xff0c;可直接与手机进行连接&#xff0c;进行数据的传输和控制 2&#xff0c;可蓝牙与蓝牙之间进行连接&#xff0c;可进行MESH组网 四、尺寸 五、注意 源文件下载 可访…

基于Jeecgboot3.6.3的vue3版本的流程ProcessViewer的修改

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、因为之前ProcessViewer是vue2的组件版本&#xff0c;平时显示也还正常&#xff0c;但在历史记录的时候老是出现下面的问题。 就是第一次进去在panel点击流程图的时候不会出现&#xff0…

React开发者并不存在

根本就没有所谓的React开发者 — 永远不要这样称呼自己。 这是许多软件开发者犯的一个巨大错误&#xff0c;浪费了你大量时间。 专注于工具而非概念。忽视了大局。 React只是一个JavaScript工具。JavaScript只是一个计算工具。计算只是一个解决问题的工具。 当我刚开始编码时&a…

VulnHub:cengbox1

靶机下载地址&#xff0c;下载完成后&#xff0c;用VirtualBox打开靶机并修改网络为桥接即可搭建成功。 信息收集 主机发现和端口扫描 扫描攻击机&#xff08;192.168.31.218&#xff09;同网段存活主机确认目标机ip&#xff0c;并对目标机进行全面扫描。 nmap 192.168.31.…

【QT】事件分发器 事件过滤器

qt 系统 - 事件分发器 and 事件过滤器 一、事件分发器1. 事件分发器概念2. 事件分发器工作原理 二、事件过滤器 一、事件分发器 1. 事件分发器概念 在 Qt 中&#xff0c;事件分发器(Event Dispatcher) 是一个核心概念&#xff0c;用于处理 GUI 应用程序中的事件。事件分发器负…

Java黑色界面陪玩高端小程序源码陪练APP源码H5公众号源码电竞系统

&#x1f680;【电竞新纪元】解锁高端陪玩小程序源码 & 陪练APP秘籍&#xff0c;H5公众号全攻略&#xff01; &#x1f3ae; 开篇&#xff1a;电竞热潮下的新机遇 Hey游戏迷们&#xff01;随着电竞行业的蓬勃发展&#xff0c;你是否也想在这股浪潮中分得一杯羹&#xff1…

opencascade AIS_Manipulator源码学习

前言 AIS_Manipulator 是 OpenCASCADE 库中的一个类&#xff0c;用于在3D空间中对其他交互对象或一组对象进行局部变换。该类提供了直观的操控方式&#xff0c;使用户可以通过鼠标进行平移、缩放和旋转等操作。 详细功能 交互对象类&#xff0c;通过鼠标操控另一个交互对象…

新手网站利用好网站地图,提高网站的pr和权重

新手网站利用好网站地图&#xff0c;提高网站的pr和权重 它能引导蜘蛛更好的抓取收录我们网站的资源&#xff0c;从而提高网站的pr和权重。但网站地图的更新是个费神费力的工作&#xff0c;对于站长&#xff0c;尤其是精力有限的草根站长&#xff0c;怎样才能将有限的时间发挥出…

DDoS 究竟在攻击什么?

分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一种常见的网络攻击形式&#xff0c;攻击者通过向目标服务端发送大量的请求&#xff0c;使目标服务端无法进行网络连接&#xff0c;无法正常提供服务。 DDoS 攻击通常是由大量的分布在全球各地的 “僵尸” 计算机&#xff08…

c++ 求解质因数(细节详解)

定义 这里先来了解几个定义&#xff08;如已了解&#xff0c;可直接看下一个板块&#xff09; 因数&#xff1a;又称为约数&#xff0c;如果整数a除以整数b&#xff08;b0&#xff09;的商正好是是整数而没有余数&#xff0c;我们就说b是a的因数 质数&#xff1a;又称为素数…

免费HTTPS代理的风险与网站推荐

在当今的网络环境中&#xff0c;免费HTTPS代理服务因其“零成本”的特点吸引了不少用户。然而&#xff0c;免费往往意味着某些隐性的代价。作为专业的测评团队&#xff0c;我们深入探索了市场上的免费HTTPS代理服务&#xff0c;并在此提醒大家注意其中的风险&#xff0c;同时推…

【企业级开发模型】Git分支设计模型 | 企业级项目挂历实战_准备工作开发场景实操

目录 3.Git分支设计模型 3.1master分支 3.2release分支 3.3develop分支 3.4feature分支 3.5hotfix分支 4.企业级项目挂历实战_准备工作&开发场景实操学习文档 3.Git分支设计模型 对于我们开发人员来说&#xff0c;对于不同的场景/环境&#xff0c;来设计分支模型。…