c++视觉检测-----角点检测
角点检测:cornerHarris()
cornerHarris()函数是OpenCV中用于执行Harris角点检测的函数。Harris角点检测是一种用于检测图像中角点的技术,通常用于特征检测和图像匹配。以下是cornerHarris()函数的用法:
void cornerHarris(InputArray src, // 输入图像(单通道、8位或32位浮点类型)OutputArray dst, // 输出角点响应图像,通常是32位浮点类型int blockSize, // 角点检测中的邻域大小(建议为2-3)int ksize, // Sobel算子的孔径大小(建议为3)double k, // Harris检测方程中的自由参数,一般取0.04 - 0.06int borderType = BORDER_DEFAULT
);
以下是参数的解释:
-
src:输入图像,通常是单通道的8位或32位浮点型图像。 -
dst:输出角点响应图像,通常是一个32位浮点型图像,用于存储检测到的角点的响应值。 -
blockSize:指定角点检测时使用的邻域大小。它通常是2x2或3x3的小邻域。 -
ksize:Sobel算子的孔径大小,用于计算图像梯度。 -
k:Harris检测方程中的自由参数,一般取0.04到0.06之间的值。它决定了角点响应的敏感性。 -
borderType:边界类型,通常设置为BORDER_DEFAULT。
cornerHarris()函数执行Harris角点检测,并将检测结果存储在dst中。通常,你可以检查dst中的响应值来确定图像中的角点位置。较高的响应值通常表示角点。
以下是一个简单的示例,演示如何使用cornerHarris()函数执行Harris角点检测:
#include "opencv2/opencv.hpp"using namespace cv;int main()
{Mat srcImage = imread("1.jpg", IMREAD_GRAYSCALE);if (srcImage.empty()){std::cout << "Could not open or find the image!" << std::endl;return -1;}Mat cornerResponse;cornerHarris(srcImage, cornerResponse, 2, 3, 0.04);Mat cornerMap = Mat::zeros(cornerResponse.size(), CV_8UC1);double maxResponse;minMaxLoc(cornerResponse, 0, &maxResponse);for (int i = 0; i < cornerResponse.rows; i++){for (int j = 0; j < cornerResponse.cols; j++){if (cornerResponse.at<float>(i, j) > 0.01 * maxResponse){circle(cornerMap, Point(j, i), 5, Scalar(255), 2);}}}imshow("Corner Map", cornerMap);waitKey(0);return 0;
}
在此示例中,我们加载了一个灰度图像,然后使用cornerHarris()函数进行角点检测。最后,我们在角点上绘制圆圈,将检测到的角点可视化。

使用本地相机进行角点检测
#include <opencv2/opencv.hpp>using namespace cv;// 滑块回调函数
void onTrackbar(int, void*);int main()
{VideoCapture cap(0);if (!cap.isOpened()){std::cerr << "Error: Could not open the camera." << std::endl;return -1;}Mat frame;Mat grayFrame;namedWindow("Harris Corner Detection", WINDOW_AUTOSIZE);int blockSize = 2;int ksize = 3;int k = 0.04;int thresholdValue = 100;int radius = 5;createTrackbar("Block Size", "Harris Corner Detection", &blockSize, 10, onTrackbar);createTrackbar("K-Size", "Harris Corner Detection", &ksize, 10, onTrackbar);createTrackbar("K Value", "Harris Corner Detection", &k, 100, onTrackbar);createTrackbar("Threshold", "Harris Corner Detection", &thresholdValue, 1000, onTrackbar);createTrackbar("Radius", "Harris Corner Detection", &radius, 20, onTrackbar);while (true){cap >> frame;if (frame.empty()){break;}cvtColor(frame, grayFrame, COLOR_BGR2GRAY);Mat cornerResponse;cornerHarris(grayFrame, cornerResponse, blockSize * 2 + 2, ksize * 2 + 1, k / 100.0);Mat cornerMap = Mat::zeros(cornerResponse.size(), CV_8UC1);double maxResponse;minMaxLoc(cornerResponse, 0, &maxResponse);for (int i = 0; i < cornerResponse.rows; i++){for (int j = 0; j < cornerResponse.cols; j++){if (cornerResponse.at<float>(i, j) > thresholdValue / 1000.0 * maxResponse){circle(cornerMap, Point(j, i), radius, Scalar(255), 2);}}}imshow("Harris Corner Detection", cornerMap);if (waitKey(30) >= 0){break;}}return 0;
}void onTrackbar(int, void*)
{// You can add custom behavior when trackbars are moved if needed.
}
使用本地相机进行二值图角点检测
#include <opencv2/opencv.hpp>using namespace cv;Mat frame; // 用于存储摄像头捕捉的帧
Mat cornerResponse; // 存储Harris角点响应
Mat cornerMap; // 二值图像
double maxResponse; // 最大响应值int main()
{VideoCapture cap(0); // 打开默认相机(通常是内置摄像头)if (!cap.isOpened()){std::cerr << "Error: Could not open the camera." << endl;return -1;}namedWindow("Harris Corner Map", WINDOW_AUTOSIZE);while (true){cap >> frame; // 从摄像头捕捉帧if (frame.empty()){break;}// 转换为灰度图像Mat gray;cvtColor(frame, gray, COLOR_BGR2GRAY);// Harris角点检测cornerHarris(gray, cornerResponse, 2, 3, 0.04);// 查找最大响应值minMaxLoc(cornerResponse, 0, &maxResponse);// 初始化二值图像cornerMap = Mat::zeros(cornerResponse.size(), CV_8UC1);// 根据阈值将角点标记为白色或黑色for (int i = 0; i < cornerResponse.rows; i++){for (int j = 0; j < cornerResponse.cols; j++){if (cornerResponse.at<float>(i, j) > 0.01* maxResponse){cornerMap.at<uchar>(i, j) = 255;}else{cornerMap.at<uchar>(i, j) = 0;}}}imshow("Harris Corner Map", cornerMap);if (waitKey(30) == 27) // 按下Esc键退出{break;}}cap.release();destroyAllWindows();return 0;
}相关文章:
c++视觉检测-----角点检测
角点检测:cornerHarris() cornerHarris()函数是OpenCV中用于执行Harris角点检测的函数。Harris角点检测是一种用于检测图像中角点的技术,通常用于特征检测和图像匹配。以下是cornerHarris()函数的用法: void cornerHarris(InputArray src, …...
虚拟机安装Docker
安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。…...
虚幻引擎5:增强输入的使用方法
一、基本配置 1.创建一个输入映射上下文(映射表) 2.创建自己需要的操作映射或者轴映射 3.创建完成之后进入这个映射,来设置类型,共有4个类型 1.Digital:是旧版操作映射类型,一般是按下抬起来使用,像跳跃…...
buffer overflow detected
背景 在应用上云改造中,业务场景如下: 在使用ecs的场景中,应用的ip都是固定的;在使用k8s之后pod的ip就变的不固定了,k8s提供了statefulset的模式来支持这种场景,以固定域名的方式支持。 问题 在平台pod开…...
【c++源码】老飞飞源码完整v15源码(包含数据库前端后端源文件)
老飞飞源码完整v15源码(包含数据库前端后端源文件)程序来源于国外网站。程序仅供参考学习游戏开发流程。以及框架内容。 测试环境搭建 Visual Studio 2013 SQL Server 2008r Windows 10 和 11 专业版 这些文件已经过测试,搭建,运行…...
MySQL创建数据库、创建表操作和用户权限
1、创建数据库school,字符集为utf8 2、在school数据库中创建Student和Score表 3、授权用户tom,密码Mysql123,能够从任何地方登录并管理数据库school 4、使用mysql客户端登录服务器,重置root密码...
时间序列分析基础篇
**时间序列分析(time series analysis)是量化投资中的一门基本技术。时间序列是指在一定时间内按时间顺序测量的某个变量的取值序列。**比如变量是股票价格,那么它随时间的变化就是一个时间序列;同样的,如果变量是股票…...
Idea JavaWeb项目,继承自HttpFilter的过滤器,启动Tomcat时部署工件出错
JDK版本:1.8 Tomcat版本:8.5 10-Oct-2023 13:55:17.586 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more Filters failed to start. Full details will be found in the appropriate conta…...
02Maven核心程序的下载与settings.xml文件的配置,环境变量的配置
Maven核心程序的解压与配置 Maven的下载与解压 Maven官网下载安装包 将下载的Maven核心程序压缩包apache-maven-3.8.4-bin.zip解压到一个非中文且没有空格的目录 Maven的核心配置文件 在Maven的解压目录conf中我们需要配置Maven的核心配置文件settings.xml 配置本地仓库位置…...
栈实现深度优先搜索
引言 之前刚学DFS的时候并不完全理解为什么递归可以一直往下做,后来直到了递归的本质是栈,就想着能不能手写栈来代替递归呢。当时刚学,自己觉得水平不够就搁置了这个想法,今天上数据结构老师正好讲了栈的应用,其中就有…...
Java 基于SpringBoot的某家乡美食系统
1 简介 《Java 基于SpringBoot的某家乡美食系统》该项目含有源码、文档等资料、配套开发软件、软件安装教程等。系统功能完整,适合作为毕业设计、课程设计、数据库大作业学习使用。 功能介绍 这个项目是基于 SpringBoot和 Vue 开发的地方美食系统,包括…...
splice 和 slice 会改变原数组吗? 怎么删除数组最后一个元素?
1、splice 和 slice 会改变原数组吗? splice() 会改变原数组,返回的是改变的内容; splice() 方法可能是数组中的最强大的方法之一了,使用它的形式有很多种,它会向/从数组中添加/删除项目,然后返回被删除的项目。 该方…...
解锁互联网安全的新钥匙:JWT(JSON Web Token)
目录 前言 一、JWT简介 1. 什么是JWT? 编辑 2. JWT的工作原理 3.JWT如何工作的 4. JWT的优势 5. 在实际应用中使用JWT 6.传统Session和JWT认证的区别 6.1.session认证方式 6.2.JWT认证方式 7.基于Token的身份认证 与 基于服务器的身份认证 二、JWT的…...
alsa音频pcm设备之i2c调试
i2cdetect 列举 I2C bus i2cdetect -l ls /dev/i2c* 列出I2C bus i2c-7 上面连接的所有设备,并得到i2c设备地址 i2cdetect -y 7 发现i2c设备的位置显示为UU或表示设备地址的数值,UU表示设备在driver中被使用. I2cdump i2c设备大量register的值 i2cdump -y 7 0x40 I2cset设置…...
1. Windows平台下如何编译C++版本的Redis库hiredis
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并…...
Centos中利用自带的定时器Crontab_实现mysql数据库自动备份_linux中mysql自动备份脚本---Linux运维工作笔记056
这个经常需要,怕出问题因而需要经常备份数据库,可以利用centos自带的定时器,配合脚本实现自动备份. 1.首先查看一下,这个crontab服务有没有打开: 执行:ntsysv 可以看到已经开机自启动了. 注意这个操作界面,用鼠标不行,需要用,tab按键,直接tab到确定,或取消,然后按回车回到命…...
完美解决Android adb install 安装提示 INSTALL_FAILED_TEST_ONLY
完美解决Android adb install 安装提示 INSTALL_FAILED_TEST_ONLY 目录 所遇问题 有些时候我们用命令进行安装apk如下: adb install xxx.apk但是会安装不成功,报如下错误: 错误现象:提示:Failed to install app-d…...
[清华大学]漏洞挖掘之状态敏感的模糊测试StateFuzz
Dr.赵博栋 Prof.张超 清华大学 网络研究院 INSC 本文主要介绍了通过State Fuzz对Linux驱动程序进行模糊测试,该Fuzz方法由赵博栋博士在InForSec会议上分享,并在USENIX Security上发布.StateFuzz :System Call-Based State-Aware Linux Driver Fuzzing.该…...
嵌入式养成计划-40----C++菱形继承--虚继承--多态--模板--异常
九十四、菱形继承 94.1 概念 菱形继承又称为钻石继承,是由公共基类派生出多个中间子类,又由中间子类共同派生出汇聚子类,汇聚子类会得到多份中间子类从公共基类继承下来的数据成员,会造成空间浪费,没有必要。 所以存…...
C++入门指南:类和对象总结友元类笔记(下)
C入门指南:类和对象总结友元类笔记(下) 一、深度剖析构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 二、static成员2.1 概念2.2 特性 三、友元3.1 友元函数3.2 友元类 四、 内部类4.1 概念4.2 特征 五、拷贝对象时的一些编译器优化六、深…...
直流GIL绝缘子表面电荷积聚的电热耦合机理与电场畸变特性研究
中国电机工程学报文献复现 关于comsol GIL仿真模型:基于电热多物理场耦合模型的直流GIL 绝缘子表面电荷积聚及其对沿面电场影响的研究上周啃完那篇中国电机工程学报的直流GIL绝缘子仿真论文,本来以为照着公式套就能搞定,结果在Comsol里卡了整…...
著名学者、顶尖大学教授近期失联
点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【顶会/顶刊】投稿交流群添加微信号:CVer2233,小助手拉你进群!扫描下方二维码,加入CVer学术星球!可以获得最新顶会/顶…...
SpringBoot+Vue实战:手把手教你搭建社区居民健康档案管理系统(附完整源码)
SpringBootVue实战:从零构建社区居民健康档案管理系统 在数字化转型浪潮下,社区卫生服务正经历着从纸质档案到智能化管理的转变。对于Java开发者而言,这不仅是技术练兵的好机会,更是解决实际社会需求的切入点。本文将带你用Spring…...
网络工程师-核心考点:计算机硬件基础全解析
一、引言计算机硬件基础是软考网络工程师考试的前置知识点,占选择题分值约 3-5 分,是理解网络设备(路由器、交换机、服务器)硬件架构的底层基础。本知识点体系起源于 1945 年冯・诺依曼提出的存储程序思想,历经 70 余年…...
【模型手术室】第七篇:模型量化 —— 从 FP16 到 4-bit 的极限压缩与性能翻倍
专栏进度:07 / 10 (微调实战专题) 大模型默认使用 FP16(16 位浮点数) 存储权重,这意味着每个参数占 2 字节。一个 7B 模型光权重就占 14GB 显存。量化的本质是把这些高精度的数字映射到更小的整数空间(如 INT4…...
颠覆传统系统管理的轻量级工具:NSudo如何重新定义权限操作
颠覆传统系统管理的轻量级工具:NSudo如何重新定义权限操作 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mirrors/ns/NSudo …...
从零搭建AI办公助手:OpenClaw+百川2-13B-4bits七日实践计划
从零搭建AI办公助手:OpenClaw百川2-13B-4bits七日实践计划 1. 为什么选择这个组合? 去年冬天,当我第一次听说OpenClaw这个开源自动化框架时,内心是充满怀疑的。作为一个长期被各种"智能助手"忽悠的技术从业者…...
炸穿 2026 技术圈!AI Agent 从 0 到 1 商业落地全攻略,附 Python 可跑源码 + 双场景变现
引言:“AI Agent:程序员效率革命的最后一公里”前言:还在死磕 CRUD、熬夜改 BUG、被重复研发工作榨干精力?2026 年的技术风口早已彻底转向 ——AI Agent,从华为虚拟工程师、蘑菇物联工业智能体,到全行业自动化落地&…...
3步打造开源工具效率引擎:QtScrcpy自定义配置全指南
3步打造开源工具效率引擎:QtScrcpy自定义配置全指南 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy …...
EVE舰船配置神器Pyfa全攻略:从新手到专家的实战指南
EVE舰船配置神器Pyfa全攻略:从新手到专家的实战指南 【免费下载链接】Pyfa Python fitting assistant, cross-platform fitting tool for EVE Online 项目地址: https://gitcode.com/gh_mirrors/py/Pyfa 在EVE Online的浩瀚宇宙中,每一位舰长都需…...
