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 特征 五、拷贝对象时的一些编译器优化六、深…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
