OpenCV目标追踪鼠标选择ROI区域

学习一下OpenCV中利用鼠标勾选ROI区域进行目标追踪,过程直接注释到代码中了。

#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/tracking.hpp>
#include <opencv2/video.hpp>
#include <opencv2/core/utility.hpp>
#include <cstring>

using namespace std;
using namespace cv;

int main(int argc,char** argv) {
    Mat frame;                                             //定义Mat类型用来存储视频流中的帧
    Ptr<TrackerKCF> tracker = TrackerKCF::create();        //创建一个跟踪器,跟踪器为KCF类型
    VideoCapture video(0);                                 //实例化一个对象video,控制摄像头视频的流入,输入参数0用来打开相机
    if(!video.isOpened())                                  //如果视频没有打开
    {
        cerr<<"cannot read video!"<<endl;                  //输出错误
        return -1;
    }

    Rect2d trackWindow;                                    //定义一个矩形窗口trackWindow
    video.read(frame);                                     //从video中读取图像存入到frame中
    trackWindow = selectROI("TRACK",frame);                //用鼠标框选感兴趣的区域
    if(trackWindow.width == 0 || trackWindow.height == 0)  //勾选区域如果为空,则返回0
    {
        return  0;
    }
    tracker->init(frame,trackWindow);                      //初始化跟踪器,用视频的第一帧,和框选的矩形区域
    cout<<"开始进行跟踪!";
    while(video.read(frame))                               //循环,不断读取视频的帧
    {

        tracker->update(frame,trackWindow);                //跟新跟踪器,用新的一帧和框选的区域
        rectangle(frame,trackWindow,Scalar(255,0,0),2,1);  //在后续帧中自动绘制矩形,矩形在新的一帧,大小为trackWindow,颜色为蓝色,线宽,线型
        imshow("TRACK",frame);                             //展示frame帧在TRACK窗口
        int k = waitKey(1);
        if(k == 27)
        {
            break;
        }
    }
//    video.read(frame);
//    Rect2d box(270,120,180,260);
//    tracker->init(frame,box);
//    while(video.read(frame))
//    {
//        tracker->update(frame,box);
//        rectangle(frame,box,Scalar(255,0,0),2,1);
//        imshow("Tracking",frame);
//        int k = waitKey(1);
//        if(k == 27)
//        {
//            break;
//        }
//    }
}
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值