【opencv】示例-camshiftdemo.cpp CamShift算法来对选定对象进行实时跟踪

9b7b2225d6b416a96501c3b27d3b8e9c.png

bitwise_not(roi, roi);

3a91f776a8b64cc321640456e95f2487.png

e0a9239041e0f7b0ec6e6d5ebe00a37d.png

backprojMode

e4bed628278781819fccb5f09002f5c8.png

#include "opencv2/core/utility.hpp" // 导入OpenCV的核心工具库
#include "opencv2/video/tracking.hpp" // 导入OpenCV的视频跟踪功能库
#include "opencv2/imgproc.hpp" // 导入OpenCV的图像处理库
#include "opencv2/videoio.hpp" // 导入OpenCV的视频输入/输出库
#include "opencv2/highgui.hpp" // 导入OpenCV的高层GUI图形界面库


#include <iostream> // 导入标准输入输出流库
#include <ctype.h> // 导入字符处理库


using namespace cv; // 使用cv命名空间简化代码
using namespace std; // 使用std命名空间简化代码


Mat image; // 声明一个Mat类型的变量,用于存储图像


// 以下是一些全局变量,用于处理鼠标选择的对象及跟踪参数设置
bool backprojMode = false; // 是否使用反向投影模式
bool selectObject = false; // 是否选择了对象
int trackObject = 0; // 跟踪对象的标志
bool showHist = true; // 是否显示直方图
Point origin; // 原点位置,用作画框时的参考点
Rect selection; // 用户用鼠标选择的区域
int vmin = 10, vmax = 256, smin = 30; // HSV颜色空间中的最小值、最大值及饱和度最小值


// onMouse是回调函数,当鼠标事件发生时调用
static void onMouse( int event, int x, int y, int, void* )
{
    if( selectObject ) // 如果选择了对象
    {
        selection.x = MIN(x, origin.x); // 选择框的x坐标
        selection.y = MIN(y, origin.y); // 选择框的y坐标
        selection.width = std::abs(x - origin.x); // 选择框的宽度
        selection.height = std::abs(y - origin.y); // 选择框的高度
        //将selection矩形裁剪(clip)到图像的边界内
        selection &= Rect(0, 0, image.cols, image.rows); // 确保选择框不超出图像范围
    }


    switch( event )
    {
    case EVENT_LBUTTONDOWN: // 鼠标左键按下事件
        origin = Point(x,y); // 记录原点位置
        selection = Rect(x,y,0,0); // 初始选择框
        selectObject = true; // 设置选择对象为true
        break;
    case EVENT_LBUTTONUP: // 鼠标左键抬起事件
        selectObject = false; // 设置选择对象为false
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值