当前位置: 首页 > news >正文

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

  角点检测用于获取图像特征,以支撑运动检测、目标识别、图像匹配等方面的应用。常用的角点检测算法包括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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Leetcode—426. 将二叉搜索树转化为排序的双向链表【中等】Plus
  • 1394总线协议
  • Android Handler之消息同步屏障
  • Linux下如何安装配置Fail2ban防护工具
  • Postman中的数据驱动测试:API测试数据准备全攻略
  • HTML + CSS编程规范
  • MLIR的TOY教程学习笔记
  • wget下载github文件得到html文件
  • 2024年自动驾驶规划控制面试及答案
  • AI测试入门:认识AI大语言模型(LLM)
  • Excel下载模板文件和导入文件的步骤
  • Windows:批处理脚本学习
  • 【BUG】已解决:IndexError: positional indexers are out-of-bounds
  • C++树形结构(1 基础)
  • CSP-J模拟赛day1——试题
  • php的引用
  • .pyc 想到的一些问题
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【前端学习】-粗谈选择器
  • Android Volley源码解析
  • JavaScript HTML DOM
  • JavaScript 奇技淫巧
  • JS基础之数据类型、对象、原型、原型链、继承
  • nodejs:开发并发布一个nodejs包
  • Python中eval与exec的使用及区别
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Xmanager 远程桌面 CentOS 7
  • 翻译--Thinking in React
  • 给初学者:JavaScript 中数组操作注意点
  • 基于web的全景—— Pannellum小试
  • 驱动程序原理
  • 如何进阶一名有竞争力的程序员?
  • 原生js练习题---第五课
  • 在Unity中实现一个简单的消息管理器
  • Android开发者必备:推荐一款助力开发的开源APP
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • (21)起落架/可伸缩相机支架
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (ZT)薛涌:谈贫说富
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二) 初入MySQL 【数据库管理】
  • (分布式缓存)Redis分片集群
  • (译)计算距离、方位和更多经纬度之间的点
  • ./configure,make,make install的作用(转)
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net core 依赖注入的基本用发