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

news2024/11/15 23:36:02

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;
}

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

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

相关文章

【C++14算法】exchange和quoted

文章目录 前言一、exchange函数1.1 exchange函数简介&#xff1a;1.2 函数原型1.3 示例代码示例1&#xff1a;替换整数对象示例2&#xff1a;替换字符串对象示例3&#xff1a;替换自定义类型对象示例4&#xff1a;替换指针对象 二、quoted函数2.1 简介&#xff1a;2.2 示例代码…

uniapp左滑列表删除

目录 效果index.vuedelSlideLeft.vuedelRightIconfont.css参考插件最后 效果 index.vue 使用页面 引入封装的页面delSlideLeft.vue <template><view class""><view v-for"(item, index) in busOrderList" :key"index" :data-in…

Python 单元测试设置

单元测试检查特定代码单元或模块是否按照开发人员的预期执行。 大多数时候&#xff0c;我们测试的代码单元是一个函数。 同样&#xff0c;我们可以测试所有功能。 作为最佳实践&#xff0c;至少在开发过程中&#xff0c;我们应该进行单元测试。 因此&#xff0c;在开发过程的…

k8s - Flannel

1.Flannel概念剖析 Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络&#xff08;Overlay Network&#xff09;工具&#xff0c;其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方…

MySQL系列索引专题

存储引擎 1.MySQL 的体系结构可以分为四层 连接层&#xff1a;最上层是一些客户端和链接服务&#xff0c;主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限服务层&#xff1a;第二层架构主要完成大多数的核心…

Redis实现简易消息队列的三种方式

Redis实现简易消息队列的三种方式 消息队列简介 消息队列是一种用于在计算机系统中传递和处理数据的重要工具。如果你完全不了解消息队列&#xff0c;不用担心&#xff0c;我将尽力以简单明了的方式来解释它。 首先&#xff0c;想象一下你正在玩一个游戏&#xff0c;而游戏中…

怎么把heic改成jpg?方法大全在这里

怎么把heic改成jpg&#xff1f;HEIC是一种现代的图像文件格式。它是由ISO制定的标准&#xff0c;并得到了苹果公司的支持和推广。与JPG等传统图像格式相比&#xff0c;HEIC格式可以提供更好的图像质量&#xff0c;并且占用更少的存储空间。这使得它在手机、平板电脑和其他移动设…

Java中在循环体内拼接字符串时为什么使用StringBuilder而不是String

在循环体内拼接字符串时为什么使用StringBuilder而不是String 在《阿里巴巴Java开发手册》一书中提到了&#xff1a; 循环体内&#xff0c;字符串的连接方式&#xff0c;请使用 StringBuilder 的 append 方法进行扩展。&#xff08;而不要用String的方式&#xff09; 说明&…

解决IP地址欺骗的网络安全策略

随着互联网的不断发展&#xff0c;网络安全已经成为企业和个人关注的重要问题。其中&#xff0c;IP地址欺骗是一种常见的威胁&#xff0c;它可能导致数据泄露、身份伪装和网络攻击。 1. 使用防火墙和入侵检测系统 防火墙和入侵检测系统&#xff08;IDS&#xff09;是网络安全…

Sui的动态可组合NFT为Cosmocadia增加游戏趣味性

的新游戏Cosmocadia展示了Sui NFT如何在游戏中四处走动&#xff0c;种植和收获蔬菜&#xff0c;并在工作台上制作工具和家具。未来将更新利用NFT&#xff0c;如私人土地&#xff0c;甚至让玩家将他们的SuiFrens NFT带入游戏中。 Lucky Kat Studios的产品经理Bente Bolland将Co…

神奇的代码恢复工具

文章目录 概述工具展示工具下载地址运行过程附件待恢复代码 概述 小C是一名程序猿&#xff0c;他有好多新奇的点子&#xff0c;也乐于把这些变成文字分享给大家。这些分享大部分都与代码相关&#xff0c;在文章里面把这些代码全部按本来的结构展示出来也不是一件容易的事&…

LMI FocalSpec 3D线共焦传感器 使用笔记1

一.硬件介绍 以上特别注意: 屏蔽线必须接地,因为在现场实际调试中,使用软件调试发现经常 弹窗 传感器丢失警告!! 以上 Position LED 的灯被钣金挡住,无法查看异常现象,能否将指示灯设置在软件界面上? 需要确认是软触发还是硬触发,理论上 硬触发比软触发速度要快.(我们目前使用…

Zilliz X Dify.AI ,快速打造知识库 AI 应用

Zilliz 大模型生态矩阵再迎新伙伴&#xff01;近日&#xff0c;Zilliz 和 Dify.AI 达成合作&#xff0c;Zilliz 旗下的产品 Zilliz Cloud、Milvus 与开源 LLMOps 平台 Dify 社区版进行了深度集成。 01.Zilliz Cloud v.s. Dify Dify 作为开源的 LLMs App 技术栈&#xff0c;在此…

[GXYCTF2019]BabyUpload - 文件上传+绕过(后缀文件类型文件内容.htaccess)

[GXYCTF2019]BabyUpload 解题流程 解题流程 1、上传一句话&#xff0c;提示“后缀不允许ph” 2、修改后缀为jpg&#xff0c;提示“上传类型也太露骨了吧&#xff01;” 3、修改类型为image/jpeg&#xff0c;提示“诶&#xff0c;别蒙我啊&#xff0c;这标志明显还是php啊” 4、…

【Axure教程】将figma导入Axure

Figma和Axure是两个不同的界面设计工具&#xff0c;Figma主要用于创建和协作设计图形界面&#xff08;UI&#xff09;&#xff0c;允许多个设计师和利益相关者同时在云端协作设计项目&#xff1b;Axure是原型设计工具&#xff0c;专注于创建高保真、可交互的原型。大家可以根据…

Java学习笔记(一)——概述

目录 一、Java概述 &#xff08;一&#xff09;Java技术体系平台 &#xff08;二&#xff09;Java重要特点 &#xff08;三&#xff09;Java运行机制及运行过程 &#xff08;四&#xff09;JDK &#xff08;五&#xff09;JRE 二、Java的快速入门 &#xff08;一&#…

掌握Python机器学习:空间模拟与时间预测的实战指南

了解全文点击:《掌握Python机器学习&#xff1a;空间模拟与时间预测的实战指南》 文章目录 一、机器学习原理与概述二、Python编译工具组合安装教程三、掌握Python语法及常见科学计算方法四、机器学习数据清洗五、机器学习与深度学习方法六、机器学习空间模拟实践操作七、机器…

6数据层相关框架-基本

MyBatis常见面试问题&#xff0c;以及和hibernate 的区别等_mybatis和hiberbate区别面试_my_styles的博客-CSDN博客*1、什么是MyBatis&#xff1f;*答&#xff1a;MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。*2、讲下MyBatis的缓存*答&#xff1a;MyBatis的…

实现即时沟通与协作的全功能IM即时通讯系统

在当今竞争激烈的商业环境中&#xff0c;高效的沟通和协作成为企业取得成功的关键。在过去&#xff0c;电子邮件和电话等传统工具是企业之间进行沟通和协作的重要手段&#xff0c;然而&#xff0c;随着科技的发展和社交化的趋势&#xff0c;IM即时通讯系统正逐渐成为企业协作的…

虹科方案 | 虹科ATTO 4K/8K以太网解决方案

一、方案背景 以太网为中小型媒体制作工作室提供经济高效的共享存储解决方案。尽管 10GbE 继续在 4K 工作流程中发挥重要作用&#xff0c;但 8K 等新格式需要额外的带宽。 为了使您的环境适应未来的新制作格式&#xff0c;需要一种更强大、低延迟的连接技术&#xff0c;一种足…