c++视觉检测------Shi-Tomasi 角点检测

Shi-Tomasi 角点检测 :goodFeaturesToTrack()

goodFeaturesToTrack() 函数是 OpenCV 中用于角点检测的功能函数。它的主要作用是检测图像中的良好特征点,通常用于计算机视觉任务中的光流估算、目标跟踪等。

函数签名:

void goodFeaturesToTrack(InputArray image, OutputArray corners, int maxCorners, double qualityLevel, double minDistance, InputArray mask = noArray(), int blockSize = 3, bool useHarrisDetector = false, double k = 0.04);

各参数解释:

  • image:输入图像(灰度图像)。
  • corners:输出参数,检测到的角点的坐标,通常是一个 std::vector<cv::Point2f>
  • maxCorners:最大要检测的角点数目。
  • qualityLevel:特征点的最低质量阈值。该参数是一个介于 0 和 1 之间的浮点数,表示特征点的最低质量水平。
  • minDistance:检测到的特征点之间的最小距离。
  • mask:可选参数,指定感兴趣区域(ROI)的掩码。
  • blockSize:每个角点周围的区域大小,用于计算角点的最小特征值。
  • useHarrisDetector:可选参数,如果设置为 true,则使用 Harris 角点检测方法,否则使用 Shi-Tomasi 角点检测方法。
  • k:Harris 角点检测方法中的自由参数,通常为 0.04。

goodFeaturesToTrack() 函数返回的 corners 包含检测到的角点的坐标。这些角点通常用于后续计算,如光流估算或目标跟踪。

根据你的需求,你可以通过调整 maxCornersqualityLevelminDistance 和其他参数来控制检测到的特征点数量和质量。同时,你还可以选择使用 Harris 角点检测或 Shi-Tomasi 角点检测方法。

#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace cv;

int main()
{
    Mat srcImage = imread("1.jpg"); // 加载图像

    if (srcImage.empty())
    {
        std::cerr << "Could not open or find the image!" << std::endl;
        return -1;
    }

    // 将图像转换为灰度图
    Mat grayImage;
    cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);

    // 设置需要检测的最大特征点数
    int maxCorners = 100;

    // 设置特征点质量(0.01 到 1 之间的值)
    double qualityLevel = 0.01;

    // 设置特征点之间的最小距离
    double minDistance = 10;

    // 使用 goodFeaturesToTrack 函数检测角点
    std::vector<Point2f> corners;
    goodFeaturesToTrack(grayImage, corners, maxCorners, qualityLevel, minDistance);

    // 在原始图像上绘制角点
    Mat resultImage = srcImage.clone();
    for (size_t i = 0; i < corners.size(); i++)
    {
        circle(resultImage, corners[i], 5, Scalar(0, 0, 255), -1);
    }

    // 显示结果
    namedWindow("Good Features To Track", WINDOW_NORMAL);
    imshow("Good Features To Track", resultImage);
    waitKey(0);

    return 0;
}

在这里插入图片描述

使用本地相机进行角点检测

#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    // 读取本地相机的视频流
    VideoCapture cap(0);
    if (!cap.isOpened())
    {
        cout << "Failed to open camera." << endl;
        return -1;
    }

    // 创建窗口和滑块
    namedWindow("Image");
    int max_corners = 100;
    createTrackbar("Max corners", "Image", &max_corners, 500);

    // 循环处理每一帧图像
    while (true)
    {
        Mat image, gray_image;
        cap >> image;
        if (image.empty()) break;

        // 转换为灰度图像
        cvtColor(image, gray_image, COLOR_BGR2GRAY);

        // 获取滑块的值作为maxCorners参数
        vector<Point2f> corners;
        double quality_level = 0.01;
        double min_distance = 10;
        int block_size = 3;
        bool use_harris_detector = false;
        double k = 0.04;
        goodFeaturesToTrack(gray_image, corners, max_corners, quality_level,
            min_distance, Mat(), block_size, use_harris_detector, k);

        // 在图像中绘制角点
        for (size_t i = 0; i < corners.size(); i++)
        {
            circle(image, corners[i], 5, Scalar(0, 0, 255), -1);
        }

        // 显示图像和滑块
        imshow("Image", image);
        char key = waitKey(1);
        if (key == 27) break;
    }

    // 释放摄像头并关闭窗口
    cap.release();
    destroyAllWindows();

    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为ERP,包含哪些内容?技术的先进性体现在哪里?

华为作为全球领先的信息和通信技术&#xff08;ICT&#xff09;解决方案提供商&#xff0c;其企业资源规划&#xff08;ERP&#xff09;系统是一个高度复杂且集成的管理软件平台&#xff0c;用于优化公司内部的业务流程和资源分配。华为ERP系统包括一系列模块和功能&#xff0c…

代码审计及示例

简介&#xff1a; 代码安全测试是从安全的角度对代码进行的安全测试评估。 结合丰富的安全知识、编程经验、测试技术&#xff0c;利用静态分析和人工审核的方法寻找代码在架构和编码上的安全缺陷&#xff0c;在代码形成软件产品前将业务软件的安全风险降到最低。 方法&#x…

论文阅读 - Hidden messages: mapping nations’ media campaigns

论文链接&#xff1a; https://link.springer.com/content/pdf/10.1007/s10588-023-09382-7.pdf 目录 1 Introduction 2 The influence model 2.1 The influence‑model library 3 Data 4 Methodology 4.1 Constructing observations 4.2 Learning the state‑transiti…

【Maven】Unknown lifecycle phase “.skip.test=true“.

idea 终端执行如下命令时 mvn clean install -Dmaven.skip.testtrue报&#xff1a; Unknown lifecycle phase ".skip.testtrue". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id&…

修炼k8s+flink+hdfs+dlink(六:学习namespace,service)

一&#xff1a;什么是namespace&#xff1f; 你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间&#xff0c;它们在逻辑上彼此隔离。 他们可以为您和您的团队提供组织&#xff0c;安全甚至性能方面的帮助&#xff01; 二&a…

【20年VIO 梳理】

19-20年VIO 梳理 1. 开源代码介绍&#xff1a; DSM2. FMD Stereo SLAM&#xff1a;融合MVG和直接方法&#xff0c;实现准确&#xff0c;快速的双目SLAM3. 基于VINS-Mono开发的SPVIS4. 改进&#xff1a;一种基于光流的动态环境移动机器人定位方案5. PVIO:基于先验平面约束的高效…

吃瓜教程3|决策树

ID3算法 假定当前样本集合D中第k类样本所占比例为pk&#xff0c;则样本集合D的信息熵定义为 信息增益 C4.5算法 ID3算法存在一个问题&#xff0c;就是偏向于取值数目较多的属性&#xff0c;因此C4.5算法使用了“增益率”&#xff08;gain ratio&#xff09;来选择划分属性 CA…

深入浅出排序算法之希尔排序

目录 1. 原理 2. 代码实现 3. 性能分析 1. 原理 希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有记录分成个组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&#xf…

警报:Citrix和VMware漏洞的PoC利用代码已发布

导语 近日&#xff0c;虚拟化服务提供商VMware向客户发出警报&#xff0c;称其Aria Operations for Logs中的一个已修补安全漏洞的PoC利用代码已经发布。这个高危漏洞&#xff08;CVE-2023-34051&#xff09;是一种绕过身份验证的情况&#xff0c;可能导致远程代码执行。本文将…

零基础Linux_23(多线程)线程安全+线程互斥(加锁)+死锁

目录 1. 线程安全 1.1 线程不安全前期 1.2 线程不安全原因 2. 线程互斥 2.1 加锁保护&#xff08;代码&#xff09; 2.2 锁的本质 3. 可重入对比线程安全 4. 死锁 4.1 死锁的必要条件 4.2 避免死锁 5. 笔试面试题 答案及解析 本篇完。 1. 线程安全 基于上一篇线程…

vue项目中内嵌iframe,打包上线时候iframe地址如何写?

vue项目中内嵌iframe&#xff0c;打包上线时候iframe地址如何写 一、项目结构1.内嵌的iframe文件位置2.打包后的iframe的位置 二、代码 前提描述&#xff0c;项目是用webpack打包的&#xff0c;内嵌一个完整的js小组件 一、项目结构 1.内嵌的iframe文件位置 2.打包后的iframe的…

Pytorch代码入门学习之分类任务(三):定义损失函数与优化器

一、定义损失函数 1.1 代码 criterion nn.CrossEntropyLoss() 1.2 损失函数简介 神经网络的学习通过某个指标表示目前的状态&#xff0c;然后以这个指标为基准&#xff0c;寻找最优的权重参数。神经网络以某个指标为线索寻找最优权重参数&#xff0c;该指标称为损失函数&am…

【开发篇】一、处理函数:定时器与定时服务

文章目录 1、基本处理函数2、定时器和定时服务3、KeyedProcessFunction下演示定时器4、process重获取当前watermark 前面API篇完结&#xff0c;对数据的转换、聚合、窗口等&#xff0c;都是基于DataStream的&#xff0c;称DataStreamAPI&#xff0c;如图&#xff1a; 在Flink…

宏电5G RedCap工业智能网关获首个中国移动5G物联网开放实验室5G及轻量化产品能力认证

10月21日&#xff0c;2023世界物联网博览会——中国移动物联网开发者大会暨物联网产业论坛在无锡圆满举行。宏电股份参与中国移动5G物联网开放实验室5G及轻量化产品能力认证成果授牌仪式&#xff0c;并获得认证证书。 此次认证主要对产品功能、产品性能、RedCap网络兼容性进行测…

DJYROS产品:基于DJYOS的国产自主割草机器人解决方案

基于都江堰泛计算操作系统的国产自主机器人操作系统即将发布…… 1、都江堰机器人操作系统命名&#xff1a;DJYROS 2、机器人算法&#xff1a;联合行业自主机器人厂家&#xff0c;构建机器人算法库。 3、机器人芯片&#xff1a;联合行业机器人AI芯片公司&#xff0c;构建专用…

Windows Server 2019 搭建FTP站点

目录 1.添加IIS及FTP服务角色 2.创建FTP账户&#xff08;用户名和密码&#xff09;和组 3.设置共享文件夹的权限 4.添加及设置FTP站点 5.配置FTP防火墙支持 6.配置安全组策略 7.客户端测试 踩过的坑说明&#xff1a; 1.添加IIS及FTP服务角色 a.选择【开始】→【服务器…

中文编程开发语言工具编程实际案例:台球棋牌混合计时计费软件使用的编程构件说明

中文编程开发语言工具编程实际案例&#xff1a;台球棋牌混合计时计费软件使用的编程构件说明 上图说明&#xff1a;该软件可以用于桌球和棋牌同时计时计费&#xff0c;在没有开台的时候&#xff0c;图片是处于等待状态&#xff0c;这使用编程工具中的固定图像构件&#xff0c;在…

leetcode做题笔记203. 移除链表元素

给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]示例 2&#xff1a; 输入&#xff1a…

css 两栏布局的实现

目录 前言 1. 浮动布局 用法 代码示例 理解 2. Flex布局 用法 代码示例 理解 3. Grid布局 用法 代码示例 理解 高质量的设计 前言 两栏布局是一种常见的网页设计模式&#xff0c;它将页面分为两个主要区域&#xff1a;主内容区域和侧边栏。这种布局方式不仅能够提…

睿趣科技:抖音小店申请流程

随着移动互联网的发展&#xff0c;越来越多的人开始尝试通过开设网店来创业。抖音作为国内最受欢迎的短视频平台之一&#xff0c;也推出了自己的电商功能——抖音小店。那么&#xff0c;如何申请抖音小店呢?下面就为大家详细介绍一下抖音小店的申请流程。 首先&#xff0c;打开…