vS2010 list模板类的应用

一.问题出现:

     博文: opencv鼠标响应处理点击打开链接中提到模板选取画框,以及错误时撤销画框。这部分怎么实现呢?

     我想到了两种方法:第一种是自己建立双向链表来处理,这种方式也不错。

                                         第二种使用VC自有的list 模板类。

二.点击打开链接查看list类的相关信息:

   STL 列表类是序列容器的一个模板类,用于将它们的元素保持为线性排列,并允许在序列的任何位置高效插入和删除。 序列存储为双向链接的元素列表,每个包含      一些 Type 类型的成员。

  里面有相关函数都讲解比较详细,遇到问题可以实时去查询。

三.实际应用

  我这边直接针对我上面提到的实际应用做些归纳。

1.头文件

#include <list> 

2.结构体

   typedef struct
{
Rect Mobanbox;  //绘制上去的矩形框
int Id; //序号
}moban;

3.定义list

     list<moban> mylist;     //强大之处在于任何数据格式都可以加入< >,以适合我们需要,我们这里加入的是结构体
  list<moban>::iterator it;

4.过程

*增加框

 每画个框,坐标赋给Mobanbox。

mylist.pushback(moban);  //并加入到mylist

 for(it=mylist.begin();it!=mylist.end();it++)   ///每次都将所有的框在原图上画一次。
{
Curmoban=*it;    //取出当前框
        drawBox(frame,Curmoban.Mobanbox, Scalar(0, 255, 255),1);  //画框函数
}

*撤销绘制的框

    mylist.erase(it);   //从列表中撤销绘制的框。

5. 再结合鼠标事件,便可实现左键画框,右键撤销绘制的框了。

6.扩展性

  这个模板的用途还是相当广的,可以用于多目标追踪,绘图存储删除.......。暂时只用到这些。虽然简单,意义蛮大。

7.看下效果:截图位置和比例不同,两张图会有差异。

左图绘制六个框                                                                           右图撤销一个框


    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值