opencv入门基础学习二

二.跟踪算法典型函数学习

   1.Ptr<Tracker> tracker = TrackerGOTURN::create();

创建跟踪器语句,目前opencv3.3提供的新的跟踪API支持的跟踪器有MIL,TLD,MedianFlow,KCF,Boosting,GOTURN几乎所有的目前比较火的跟踪器;

通过定义可以看到,在class--tracker中的所有跟踪器都是以虚函数的形式给出来的,而tracker函数也是虚函数形式,这种虚函数的嵌套结构使得一个简单的语句却能支持所有出现的跟踪器,减少了代码量,提高了代码利用率。

2.VideoCapturecap("opencv1.mp4");获得将要跟踪的视频,官方示例中给出的是std::string video = argv[1]; VideoCapturecap(video);前面给出的提示是所输入的可以是多帧的图片,但图片编号要有一定的规则,或者输入视频,但是这段代码其实只是一个示例,将一个定义为串的变量video作为捕获的视频,但是其实是跑不出来结果的,刚开始看不懂,不知道为什么出现dos框就没了,后来我自己的想法是,这个写法可能就是支持多帧图片编码的输入或者视频输入的形式,video变量定义的时候申请一定长度的空间,然后初始化为视频的名称字符串或者多帧图片的编码输入,这样就可以同时支持视频输入或者图片输入。其次VideoCapture cap("opencv1.mp4")这个函数,是之前看过的,作为捕获视频的函数,当括号内参量为0时,调用所用设备的摄像头进行视频捕获,我修改的是直接输入视频的名称进行捕获了。CV_WRAP VideoCapture(constString& filename, int apiPreference);当设备有多个摄像头时,可以通过后面的参量来确定所选进行捕获的摄像头的编号来调用相应的摄像头,默认摄像头的调用标号为0。

3. roi =selectROI("tracker", frame);if (roi.width == 0 || roi.height == 0) return0;在名为tracker的窗口里在当前图片帧中通过鼠标框选跟踪目标,即定义ROI区域框选住跟踪目标,它有自己定义的鼠标回调函数,用于响应鼠标操作。

4. tracker->init(frame, roi);跟踪器初始化函数,用捕获的flame和选定的目标ROI区域对跟踪器进行初始化;CV_WRAP bool init( InputArray image, const Rect2d&boundingBox );该函数在虚函数tracker内部是一个bool函数,如果在当前帧中跟踪器能正确跟踪目标则返回true否则返回false,跟踪不到目标可能是因为目标确实不在当前帧中,或者别的原因,但是跟踪器不会显示出来,而是继续显示上一帧里返回的目标位置的边界框。

5. tracker->update(frame, roi);更新跟踪器,通过在一个无限循环的for语句中,不断地取得当前帧并用当前帧来更新跟踪器,ROI代表当前帧中目标位置的边界框,当返回true的时候该边界框将更新,否则不做修改;

6. rectangle(frame, roi, Scalar(255, 0, 0), 2, 1);画出当前目标位置的ROI区域的矩形框函数。这是画图应用,最后的两个参数代表所画矩形框的厚度和线的类型;除了矩形,还可以用椭圆形ellipse()和圆形circle()函数来画出ROI框,但是由于 CV_EXPORTS_W Rect selectROI(const String& windowName, InputArrayimg, bool showCrosshair = true, bool fromCenter = false);即定义的ROI区域是矩形的,所绘区域可以直接用ROI区域初始化,而其它的图形则要相应返回ROI区域的中心及半径才能绘图。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值