OpenCV视觉分析之目标跟踪(8)目标跟踪函数CamShift()使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

找到物体的中心、大小和方向。

CamShift(Continuously Adaptive Mean Shift)是 OpenCV 中的一种目标跟踪算法,广泛应用于视频中对象的跟踪。CamShift 算法结合了 Mean Shift 算法和颜色直方图,通过迭代寻找目标区域的颜色分布中心,从而实现目标的跟踪。

基本原理

  • 颜色直方图:首先,根据目标区域的颜色信息构建颜色直方图。颜色直方图描述了目标区域中各颜色的分布情况。
  • Mean Shift:Mean Shift 算法通过迭代寻找目标区域的颜色分布中心,逐步调整目标区域的位置和大小。
  • 适应性调整:CamShift 算法不仅调整目标区域的位置,还根据目标区域的颜色分布调整其大小和方向,从而实现更精确的跟踪。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;Rect selection;
bool selecting   = false;
bool trackObject = false;
Point origin;
Mat frame;  // 声明一个全局变量来存储当前帧void onMouse( int event, int x, int y, int, void* )
{if ( selecting ){selection.x      = MIN( x, origin.x );selection.y      = MIN( y, origin.y );selection.width  = abs( x - origin.x );selection.height = abs( y - origin.y );selection &= Rect( 0, 0, frame.cols, frame.rows );  // 使用全局变量 frame}switch ( event ){case EVENT_LBUTTONDOWN:selecting = true;origin    = Point( x, y );selection = Rect( x, y, 0, 0 );break;case EVENT_LBUTTONUP:selecting = false;if ( selection.width > 0 && selection.height > 0 ){trackObject = true;}break;}
}int main()
{VideoCapture cap(0);if ( !cap.isOpened() ){cerr << "Error opening video file" << endl;return -1;}namedWindow( "CamShift Tracker", WINDOW_NORMAL );setMouseCallback( "CamShift Tracker", onMouse );while ( true ){cap >> frame;if ( frame.empty() )break;Mat hsv_frame, hue_frame, mask, backproj;cvtColor( frame, hsv_frame, COLOR_BGR2HSV );if ( trackObject ){// 提取 H(色调)通道vector< Mat > hsv_channels;split( hsv_frame, hsv_channels );Mat hue_channel = hsv_channels[ 0 ];// 计算颜色直方图Mat roi = hue_channel( selection );Mat hsv_hist;int histSize[]        = { 32 };float hranges[]       = { 0, 180 };const float* ranges[] = { hranges };calcHist( &roi, 1, 0, Mat(), hsv_hist, 1, histSize, ranges, true, false );normalize( hsv_hist, hsv_hist, 0, 255, NORM_MINMAX );// 计算反投影calcBackProject( &hue_channel, 1, 0, hsv_hist, backproj, ranges, 1, true );// 使用 CamShift 进行跟踪TermCriteria term_crit( TermCriteria::COUNT | TermCriteria::EPS, 10, 1 );RotatedRect track_box = CamShift( backproj, selection, term_crit );// 绘制跟踪结果ellipse( frame, track_box, Scalar( 0, 255, 0 ), 2 );}// 绘制选择区域if ( selecting ){rectangle( frame, selection, Scalar( 255, 0, 0 ), 2 );}imshow( "CamShift Tracker", frame );char c = waitKey( 30 );if ( c == 27 )break;  // 按下 ESC 键退出}cap.release();destroyAllWindows();return 0;
}

运行结果

在这里插入图片描述

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

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

相关文章

gradlew命令打包报错:malformed input off : 50, length : 1

Execution failed for task :app:mapǧ&#xfffd;&#xfffd;Ѫսƪ_officialOfficialReleaseSourceSetPaths. > Could not resolve all files for configuration :app:ǧ&#xfffd;&#xfffd;Ѫսƪ_officialOfficialReleaseRuntimeClasspath. > Failed to trans…

[云] 大数据分析栈(Big Data Analytics Stack)+ Apache Hadoop分布式文件系统(HDFS)+Apache Spark

任务概述 本次作业旨在帮助你理解大数据分析栈&#xff08;Big Data Analytics Stack&#xff09;的工作原理&#xff0c;并通过实际操作加深认识。你将搭建Apache Hadoop分布式文件系统&#xff08;HDFS&#xff09;作为底层文件系统&#xff0c;并将Apache Spark作为执行引擎…

ESP8266 自定义固件烧录-Tcpsocket固件

一、固件介绍 固件为自定义开发的一个适配物联网项目的开源固件&#xff0c;支持网页配网、支持网页tcpsocket服务器配置、支持串口波特率设置。 方便、快捷、稳定&#xff01; 二、烧录说明 固件及工具打包下载地址&#xff1a; https://download.csdn.net/download/flyai…

新能源汽车空调压缩机:科技驱动的冷暖核心

一、新能源汽车空调系统概述 新能源汽车空调系统在车辆中起着至关重要的作用&#xff0c;它直接影响着驾乘人员的舒适度。新能源汽车空调系统主要由制冷系统、加热系统、送风系统、操纵控制系统和空气净化系统等组成。 制冷系统通常由电动压缩机、冷凝器、压力传感器、电子膨…

Leetcode 213. 打家劫舍 II 动态规划

原题链接&#xff1a;Leetcode 213. 打家劫舍 II class Solution { public:int rob(vector<int>& nums) {int n nums.size();if (n 1)return nums[0];if (n 2)return max(nums[0], nums[1]);// 如果偷了第一家&#xff0c;就不能偷最后一家int dp[n - 1];dp[0] …

助力AI智能化时代:全国产化飞腾FT2000+/64+昇腾310B服务器主板

在信息技术快速发展的今天&#xff0c;服务器作为数据处理和存储的核心设备&#xff0c;肩负着越来越重要的使命。全国产化的服务器主板&#xff0c;采用飞腾FT2000/64核处理器&#xff0c;搭配华为昇腾310的AI芯片&#xff0c;提供卓越的性能与可靠性。 核心配置&#xff0c;强…

IO 多路复用技术:原理、类型及 Go 实现

文章目录 1. 引言IO 多路复用的应用场景与重要性高并发下的 IO 处理挑战 2. IO 多路复用概述什么是 IO 多路复用IO 多路复用的优点与适用场景 3. IO 多路复用的三种主要实现3.1 select3.2 poll3.3 epoll三者对比 4. 深入理解 epoll4.1 epoll 的三大操作4.2 epoll 的核心数据结构…

大学英语神器:让GPT帮助你攻克完型填空和阅读理解

这里写目录标题 0、前言一、再来十篇完型填空和阅读理解第一部分&#xff1a;操作指南1.访问链接&#xff1a;ChatGPT 4o国内直接访问地址&#xff1a;https://share.xuzhugpt.cloud/2.上plus的车 第二部分&#xff1a;实操展示①完型填空②阅读理解 二、用户体验 0、前言 学习…

masm汇编debug调试1~100求和

计算123...100并把结果放到寄存器AX里 assume cs:codecode segment start:mov ax,0mov cx,100 s:add ax,cxloop smov ax,4c00hint 21hcode ends end start 效果演示&#xff1a;

LeetCode3226题. 使两个整数相等的位更改次数(原创)

【题目描述】 给你两个正整数 n 和 k。 你可以选择 n 的 二进制表示 中任意一个值为 1 的位&#xff0c;并将其改为 0。 返回使得 n 等于 k 所需要的更改次数。如果无法实现&#xff0c;返回 -1。 示例 1&#xff1a; 输入&#xff1a; n 13, k 4 输出&#xff1a; 2 解释&am…

ubuntu 异常 断电 日志 查看

sudo less /var/log/syslog 搜 Linux version

Python:入门基础

目录 常量和表达式 变量 变量的语法 变量的类型 动态类型特性 注释的使用 输入和输出 通过控制台输出 通过控制台输入 运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符 常量和表达式 print是Python中的一个内置函数&#xff0c;使用print函数可以将数据打印…

ChatGPT 高级语音模式已登陆 Windows 和 Mac 平台,对话更自然

OpenAI ChatGPT 高级语音模式已登陆 Windows 和 Mac 平台&#xff0c;对话更自然&#xff0c;拟态更逼真 OpenAI 于10月31日正式宣布&#xff0c;ChatGPT 的高级语音模式&#xff08;Advanced Voice Mode&#xff0c;简称 AVM&#xff09;现已登陆 Windows 和 Mac 平台。基于最…

【深度学习】InstantIR:图片高清化修复

InstantIR——借助即时生成参考的盲图像修复新方法 作者:Jen-Yuan Huang 等 近年来,随着深度学习和计算机视觉技术的飞速发展,图像修复技术取得了令人瞩目的进步。然而,对于未知或复杂退化的图像进行修复,仍然是一个充满挑战的任务。针对这一难题,研究者们提出了 Insta…

【深度学习】实验 — 动手实现 GPT【三】:LLM架构、LayerNorm、GELU激活函数

【深度学习】实验 — 动手实现 GPT【三】&#xff1a;LLM架构、LayerNorm、GELU激活函数 模型定义编码一个大型语言模型&#xff08;LLM&#xff09;架构 使用层归一化对激活值进行归一化LayerNorm代码实现scale和shift 实现带有 GELU 激活的前馈网络测试 模型定义 编码一个大…

信息抽取与知识图谱技术在医疗领域中的应用

​快瞳AI开放平台支持多种输入格式&#xff0c;如电子病历、临床数据和医学文献等&#xff0c;可以将这些信息快速转换为结构化数据&#xff0c;包括自动360度不同角度的旋转识别、自动校准弯曲透视、光照不均、手写叠加处理等&#xff0c;提升数据的可操作性和可检索性。通过我…

SpringCloudAlibaba实战入门之OpenFeign高级用法(十)

在上一篇中我们简单了解了OpenFeign的简单使用,本篇是承接上一篇的高级使用拓展内容。 一、@FeignClient 标签的常用属性 @FeignClient 注解是 Spring Cloud OpenFeign 中用于声明一个 Feign 客户端的核心注解。它可以用来指定服务的名称、配置类、负载均衡策略等。下面是 @…

DBeaver 数据库安装及破解个人使用 不同版本不同jdk

DBeaver DBeaver 分为 **Lite、Enterprise、Ultimate&#xff08;功能最全&#xff09;、Community&#xff0c;**其中Community免费使用&#xff0c;但是功能不言而喻&#xff0c;具体差异自行去官网对比。 安装 DBeaver 到官网下载即可 https://dbeaver.io/download/ 激活 D…

docker安装中的遇到的问题及解决方案

docker 安装中遇到的问题及解决方案 截至2024/11/1&#xff0c;我在安装docker中遇到的问题将悉数列出&#xff0c;供大家参考。 说明&#xff1a;这些解决方案在我自己的虚拟机中有用&#xff0c;可能大家的虚拟机并不适用&#xff0c;这些解决方案均转载自另外的博客&#x…

Jetson OrinNX平台CSI相机导致cpu load average升高问题调试

1. 前言 硬件: Orin NX JP: 5.1.2, R35.4.1 用v4l2-ctl --stream-mmap -d0 命令去获取相机数据时, 用top查看cpu使用情况, CPU占用率很低,但load average在1左右, 无任何程序运行时,load average 为0 用ps -aux 查看当前进程情况,发现有两个系统进程vi-output, …