当前位置:  编程技术>移动开发
本页文章导读:
    ▪视频追踪算法        视频跟踪算法  Casevision公司的AVT21自动视频跟踪算法模块提供了多种跟踪算法:质心跟踪算法(Centroid)、多目标跟踪算法(MTT)、相关跟踪算法(Correlation)、边缘跟踪算法(Edge)、相位相.........
    ▪ QLinkedList跟std:forward_list        QLinkedList和std::forward_listforward_list forward_list是C++11版本才有的。forward_list被实现为单链表,而list是一个双向链表,所以forward_list要比list高效一些。forward_list设计的时候就是追求效率的,跟我.........
    ▪ Protocol跟其他一些小方法使用       Protocol和其他一些小方法使用 1. 判断该类包含protocol协议@autoreleasepool { Student *stu = [[Student alloc]init]; //Study是protocol if([stu conformsToProtocol:@protocol(Study)]){ NSLog(@"have s.........

[1]视频追踪算法
    来源: 互联网  发布时间: 2014-02-18
视频跟踪算法

 

Casevision公司的AVT21自动视频跟踪算法模块提供了多种跟踪算法:质心跟踪算法(Centroid)、多目标跟踪算法(MTT)、相关跟踪算法(Correlation)、边缘跟踪算法(Edge)、相位相关跟踪算法(Phase Correlation),场景锁定算法(SceneLock)和组合(Combined)跟踪算法。

质心跟踪算法(Centroid)

这种跟踪方式用于跟踪有界目标如飞机,目标完全包含在摄像机的视场范围内,对于这种跟踪方式可选用一些预处理算法:如白热(正对比度)增强、黑热(负对比度)增强,和基于直方图的统计(双极性)增强。

相关跟踪算法(Correlation)

相关可用来跟踪多种类型的目标,当跟踪目标无边界且动态不是很强时这种方式非常有效。典型应用于:目标在近距离的范围,且目标扩展到摄像机视场范围外,如一艘船。

边缘跟踪算法(Edge)

当跟踪目标有一个或多个确定的边缘而同时却又具有不确定的边缘,这时边缘跟踪是最有效的算法。典型地火箭发射,它有确定好的前边缘,但尾边缘由于喷气而不定。

多目标跟踪算法(MMT)

多目标跟踪用于有界目标如飞机、地面汽车等。它们完全在跟踪窗口内。在复杂环境里的小目标跟踪MMT能给出一个较好的性能。

相位相关跟踪算法(Phase Correlation)

相位相关算法是非常通用的算法,既可以用来跟踪无界目标也可以用来跟踪有界目标。在复杂环境下(如地面的汽车)能给出一个好的效果。

场景锁定跟踪算法(SceneLock)

该算法专门用于复杂场景的跟踪。适合于空对地和地对地场景。这个算法跟踪场景中的多个目标,然后依据每个点的运动,从而估计整个场景全局运动,场景中的目标和定位是自动选择的。当存在跟踪点移动到摄像机视场外时,新的跟踪点能自动被标识。瞄准点初始化到场景中的某个点,跟踪启动,同时定位瞄准线。在这种模式下,能连续跟踪和报告场景里的目标的位置。

组合跟踪算法(Combined)

顾名思义这种跟踪方式是两种具有互补特性的跟踪算法的组合:相关类算法 + 质心类算法。它适合于目标尺寸、表面、特征改变很大的场景(如小船在波涛汹涌的大海里行驶)。

 


    
[2] QLinkedList跟std:forward_list
    来源: 互联网  发布时间: 2014-02-18
QLinkedList和std::forward_list

forward_list

forward_list是C++11版本才有的。forward_list被实现为单链表,而list是一个双向链表,所以forward_list要比list高效一些。forward_list设计的时候就是追求效率的,跟我们自己写的C格式的单链表一样的高效。

考虑到效率问题,forward_list没有size成员函数。由于它本质是一个链表,有一个size成员会耗费常量的时间来计数其大小。这将需要一些额外的空间而且会降低插入和删除操作的效率。如果要获得forward_list 的大小,可以对begin和end调用distance算法操作。

 

forward_list 的大部分操作还是跟list差不多的,这里就简单看一些不一样的操作:

迭代器:

List是双向链表,所以有反向迭代器;而forward_list就没有反向迭代器。但是比list多了两种迭代器:

 iterator before_begin() noexcept;

const_iterator before_begin() const noexcept;

 

const_iterator cbefore_begin() const noexcept;

这两种迭代器指向第一个元素之前的位置,所以不能解引用。它可以用做emplace_after, insert_after, erase_after or splice_after的参数。

添加删除元素的操作:

template <class... Args> void emplace_front (Args&&... args);

在链表头节点的前面插入一个节点,新节点是用args做参数构造出来的。

void push_front (const value_type& val);
void push_front (value_type&& val);
在链表头节点的前面插入一个节点,但是与emplace_front不同的地方就是新节点是通过拷贝或者转移了val的。
template <class... Args>   iterator emplace_after (const_iterator position, Args&&... args);
 
iterator insert_after ( const_iterator position, const value_type& val );
iterator insert_after ( const_iterator position, value_type&& val );
iterator insert_after ( const_iterator position, size_type n, const value_type& val );
template <class InputIterator>  iterator insert_after ( const_iterator position, InputIterator first, InputIterator last );
iterator insert_after ( const_iterator position, initializer_list<value_type> il );

在position之后插入新节点

iterator erase_after (const_iterator position);  
iterator erase_after (const_iterator position, const_iterator last);

删除position位置的节点

void pop_front();

删除第一个节点

因为forward_list是单链表,为了能跟list有想通的功能,所以就需要before_begin迭代器,使得可以在头节点之前插入新节点。

其他的函数都跟list的差不多,这里就不重复了。需要记住的就是forward_list没有size成员函数。需要自己计算获取其大小。

 

 

 

 

 

 

 

QLinkedList

QLinkedList才是Qt真正意义上的链表。QLinkedList实际上跟std::list是一样的,也是双向链表。QList实际内部还是一个指针数组。QLinkedList提供的函数大部分还是跟QList一样的,下面我们就看一些不同的地方。

 

int QLinkedList::size () const

返回链表的大小,即节点个数。而forward_list没有这个函数。

 

const_iterator QList::constBegin () const

const_iterator QList::constEnd () const

这是QList返回STL风格的迭代器。QLinkedList则没有提供这样的函数。

 

void QList::append ( const T & value )

void QList::append ( const QList<T> & value )

 

void QLinkedList::append ( const T & value )

QLinkedList 没有接受一个QLinkedList 参数的append函数。

 

最重要的区别就是:

QLinkedList没有 T &

operator[] ( int i )

链表是肯定不能支持索引操作的。

所以QList提供的所有基于索引的操作,QLinkedList都是不可能支持的,比如:

const T &

at ( int i ) const

void

insert ( int i, const T & value )

void

move ( int from, int to )

void

replace ( int i, const T & value )

T

takeAt ( int i )

void

swap ( int i, int j )

可能还有其他函数,这里就不一一列举了。

QLinkedList提供了与std::list的转换函数:

QLinkedList<T>

fromStdList ( const std::list<T> & list )

std::list<T>QLinkedList::toStdList () const

需要记住的一点:Qt容器是隐式共享的。QLinkedList自然也是支持隐式共享的。

 


    
[3] Protocol跟其他一些小方法使用
    来源: 互联网  发布时间: 2014-02-18
Protocol和其他一些小方法使用
1. 判断该类包含protocol协议

@autoreleasepool {
        Student *stu = [[Student alloc]init];
        //Study是protocol
        if([stu conformsToProtocol:@protocol(Study)]){
            NSLog(@"have study!");
        }
        [stu release];
    }


2. 判断一个类是否有指定方法
if([stu respondsToSelector:@selector(test)]){
            NSLog(@"has method");
        }


3. 直接访问成员变量
Student *stu = [[Student alloc] init];
//访问成员变量得getter和setter方法
stu.test = 10;
//直接访问成员变量
stu->test = 10;

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3