Leap::Frame Class Reference 帧类参考
简要说明(由于本人英语水平真的很烂,文里漏洞百出,欢迎批评指正)
帧类代表了在一个帧中检测到的手和手指的跟踪数据的集合。
继承 Leap::Interface
公有成员函数
float () const
瞬时帧速率
Finger (int32_t ) const
具有在这个帧中特定ID的Finger手指对象
FingerList () const
以任意的顺序返回,这个帧中检测到的手指对象的列表
()
构造一个帧对象
Gesture (int32_t ) const
具有在这个帧中特定ID的Gesture手势对象
GestureList () const
在这个帧中识别到的或连续的手势
GestureList (const &sinceFrame) const
返回一个手势列表对象,包含返回自从某一帧以来发生的所有的手势
Hand (int32_t ) const
具有在这个帧中特定ID的Hand手对象
HandList () const
以任意的顺序返回,这个帧中检测到的手对象的列表
int64_t () const
这个帧的唯一的ID
InteractionBox () const
这个帧的当前的InteractionBox
bool () const
报告这个帧实例是否有效
bool (const &) const
比较帧对象不同
bool (const &) const
比较帧对象相同
Pointable (int32_t ) const
具有在这个帧中特定ID的尖端物体对象
PointableList () const
以任意的顺序返回,这个帧中检测到的尖端物体对象(手指或者工具)的列表
float (const &sinceFrame) const
从当前帧和特定的帧之间的所有旋转运动中围绕着旋转轴的旋转角度大小
float (const &sinceFrame, const &axis) const
从当前帧和特定的帧之间的所有旋转运动中围绕某一指定旋转轴的旋转角度大小
Vector (const &sinceFrame) const
从当前帧和特定的帧之间的所有旋转运动中的旋转坐标
Matrix (const &sinceFrame) const
表达从当前帧和特定的帧之间的所有旋转运动的旋转的变换矩阵
float (const &sinceFrame) const
从当前帧和指定的帧之间的所有的动作被确定为是一个旋转动作的估计概率
float (const &sinceFrame) const
从当前帧和特定的帧之间的所有运动的缩放因子
float (const &sinceFrame) const
从当前帧和指定的帧之间的所有的动作被确定为是一个缩放动作的估计概率
int64_t () const
以微秒为单位从Leap开始之后的帧的捕获时间
Tool (int32_t ) const
具有在这个帧中特定ID的工具对象
ToolList () const
以任意的顺序返回,这个帧中检测到的工具对象的列表
std::string () const
一个包含简短的、可读的对这个帧对象的描述的字符串
Vector (const &sinceFrame) const
从当前帧和指定的帧之间的所有线性动作的位置变化
float (const &sinceFrame) const
从当前帧和指定的帧之间的所有的动作被确定为是一个平移动作的估计概率
静态公有成员函数
static const Frame& invalid()
返回一个无效的帧对象
友元函数
std::ostream & (std::ostream &, const &)
打印一个包含简短的、可读的对这个帧对象的描述到输出流中
详细描述
帧类代表了在一个帧中检测到的手和手指的跟踪数据的集合。
Leap Motion软件在可跟踪区域内检测手、手指和工具,报告它们的位置、方向、手势和运动,以Leap Motion的帧率。
访问帧对象通过Controller类的实例。
if( controller.isConnected()) //controller is a Controller object { Frame frame = controller.frame(); //The latest frame Frame previous = controller.frame(1); //The previous frame }
当一个新帧可获得时,实现一个Listener子类来接收回调事件。
Since
1.0
构造函数和析构函数文档
Leap::Frame::Frame()
构造一个帧对象。
使用这个函数构造的帧实例是无效的。通过调用
函数来获得有效的帧对象。Frame current = controller.frame(); Frame previous = controller.frame(1);
Since
1.0
成员函数文档
float Leap::Frame::currentFramesPerSecond()const
瞬时帧率。
Leap Motion 软件提供帧数据的速率(帧/秒)。帧速率可能是波动的,这取决于可利用的计算机资源,在视场之内的活动,软件跟踪设置,以及其他的因素。
float instantaneousFrameRate = frame.currentFramesPerSecond();
返回:
Leap Motion 控制器的一个估计的帧率。
Since
1.0
Leap::Frame::finger(int32_t id)const
具有在这个帧中特定ID的Finger手指对象.
使用
函数从帧中来检索手指对象,使用从前一帧中获得到的ID值。这个函数经常返回一个手指对象,但是如果当前没有这个ID的手指,一个无效的手指对象将被返回。Finger fingerOfinterest = frame.finger(fingerID);
注意;这个ID值在多帧之间保留,直到跟踪的这个特殊对象丢失了。如果跟踪的一个手指对象丢失了但是稍后又获得了,代表同一个实际手指的这个新的手指对象可能会和之前的帧中的手指对象具有不同的ID。
参数:
id 从前一帧中获取的手指对象的ID
返回:
匹配这个ID的手指对象,如果在这一帧中不存在,那么返回一个无效的手指对象。
Since
1.0
Leap::Frame::fingers()const
以任意的顺序返回,这个帧中检测到的手指对象的列表
如果没有检测到手指,那么这个列表是空的。
FingerList fingersInFrame = frame.fingers();
返回:
在帧中检测到的所有手指对象的手指列表
Since
1.0
Leap::Frame::gesture(int32_t id)const
具有在这个帧中特定ID的Gesture手势对象
使用
函数从帧中来检索手势对象,使用从前一帧中获得到的ID值。这个函数经常返回一个手势对象,但是如果当前帧中没有这个手势的更新,一个无效的手势对象将被返回。Gesture gestureOfInterest = frame.gesture(gestureID);
所有的手势对象表示拥有这个ID的相同的识别出的运动。
参数:
id 从前一帧中获取的手势对象的ID
返回:
匹配这个ID的手势对象,如果在这一帧中不存在,那么返回一个无效的手势对象。
Since
1.0
Leap::Frame::gestures()const
在这个帧中识别到的或持续的手势
GestureList gesturesInFrame = frame.gestures();
圆圈和滑动手势在每一帧中更新。点击手势值在列表中的一个单独的帧中出现。
返回:
手势列表
Since
1.0
Leap::Frame::gestures(const & sinceFrame)const
返回一个手势列表对象,包含返回自从某一帧以来发生的所有的手势.
GestureList gesturesSinceFrame = frame.gestures(lastProcessedFrame);
参数:
sinceFrame 一个之前的帧对象。开始帧必须仍然在历史帧缓存中,默认的历史帧长度是60.
返回:
GestureList 从特定的帧开始发生的手势对象的列表。
Since
1.0
Leap::Frame::hand(int32_t id)const
具有在这个帧中特定ID的Hand手对象
使用
函数从帧中来检索手对象,使用从前一帧中获得到的ID值。这个函数经常返回一个手对象,但是如果当前帧中没有具有这个ID这个手对象,那么一个无效的手对象将被返回。Hand handOfInterest = frame.hand(handID);
注意:这个ID值在多帧之间保留,直到跟踪的这个特殊对象丢失了。如果跟踪的一个手对象丢失了但是稍后又获得了,代表同一个实际手的这个新的手对象可能会和之前的帧中的手对象具有不同的ID。
参数:
id 从前一帧中获取的手对象的ID
返回:
匹配这个ID的手对象,如果在这一帧中不存在,那么返回一个无效的手对象。
Since
1.0
Leap::Frame::hands()const
以任意的顺序返回,这个帧中检测到的手对象的列表。
如果没有手对象检测到,那么这个列表是空的。
HandList handsInFrame = frame.hands();
返回:
在帧中检测到的包含所有手对象的手列表。
Since
1.0
int64_t Leap::Frame::id()const
表示这个帧的唯一的ID。
Leap Motion 软件处理的相邻帧拥有连续的增加值。你可以使用帧ID来避免处理同一个帧对象两次。
int64_t lastFrameID = 0; void processFrame( Leap::Frame frame ) { if( frame.id() == lastFrameID ) return; //... lastFrameID = frame.id(); }
同时也要保证你的应用程序处理了每一帧。
int64_t lastProcessedFrameID = 0; void nextFrame( Leap::Controller controller ) { int64_t currentID = controller.frame().id(); for( int history = 0; history < currentID - lastProcessedFrameID; history++) { processFrame( controller.frame(history) ); } lastProcessedFrameID = currentID; } void processNextFrame( Leap::Frame frame ) { if( frame.isValid() ) { //... } }
返回:
帧的ID
Since
1.0
Leap::Frame::interactionBox()const
这个帧的当前的InteractionBox。
查看InteractionBox类文档上 更多的介绍来了解如何使用这个类。
InteractionBox box = frame.interactionBox();
返回:
当前的InteractionBox对象。
Since
1.0
static const & Leap::Frame::invalid()
返回一个无效的帧对象。
你可以使用这个函数返回的实例来比较测试是否一个给定的帧实例是有效的还是无效的。(你也可以使用
函数)//Average a finger position for the last 10 frames int count = 0; Leap::Vector average = Leap::Vector(); Leap::Finger fingerToAverage = frame.fingers()[0]; for( int i = 0; i < 10; i++ ) { Leap::Finger fingerFromFrame = controller.frame(i).finger(fingerToAverage.id()); if( fingerFromFrame.isValid() ) { average += fingerFromFrame.tipPosition(); count++; } } average /= count;
返回:
无效的帧实例
Since
1.0
bool Leap::Frame::isValid()const
报告这个帧是否是有效的。
一个有效的帧是由
对象产生的,它包含所有检测到的实体的跟踪数据。一个无效的帧不包含实际的跟踪数据,但是你可以调用它的函数而不会产生空指针异常的风险。这个无效的帧机制使在历史帧中跟踪个体数据更加方便。例如,你可以调用:Finger finger = controller.frame(n).finger(fingerID);
对于一个任意的帧历史值,“n”,没有事先检测是否frame(n)返回了一个有效帧对象。(你可以仍然检查一个返回的帧对象是否有效)
返回;
True,如果这个帧是有效的,否则返回false。
Since
1.0
bool Leap::Frame::operator!=(const & )const
比较帧是否不同。
thisFrame != thatFrame;
帧对象是相同的,当且仅当这两个帧对象代表的正是同一个帧的跟踪数据,并且帧对象是有效的。
Since
1.0
bool Leap::Frame::operator==(const & )const
比较帧是否相同。
thisFrame == thatFrame;
帧对象是相同的,当且仅当这两个帧对象代表的正是同一个帧的跟踪数据,并且帧对象是有效的。
Since
1.0
Leap::Frame::pointable(int32_t id)const
具有在这个帧中特定ID的尖端物体对象。
使用
函数从帧中来检索尖端物体对象,使用从前一帧中获得到的ID值。这个函数经常返回一个尖端物体对象,但是如果当前帧中没有具有这个ID这个手指或者工具对象,那么一个无效的尖端物体对象将被返回。Pointable pointableOfInterest = frame.pointable(pointableID);
注意:这个ID值在多帧之间保留,直到跟踪的这个特殊对象丢失了。如果跟踪的一个手指或者工具对象丢失了但是稍后又获得了,代表同一个实际手指或者工具的这个新的尖端物体对象可能会和之前的帧中的尖端物体对象具有不同的ID。
参数:
id 从前一帧中获取的尖端物体对象的ID
返回:
匹配这个ID的尖端物体对象,如果在这一帧中不存在,那么返回一个无效的尖端物体对象。
Since
1.0
Leap::Frame::pointables()const
以任意的顺序返回,这个帧中检测到的尖端物体对象(手指或者工具)的列表。
如果没有手指或者工具被检测到,那么这个列表会是空的。
PointableList pointablesInFrame = frame.pointables();
返回:
包含在帧中检测到的所有尖端物体对象的列表
Since
1.0
float Leap::Frame::rotationAngle(const & sinceFrame)const
从当前帧和特定的帧之间的所有旋转运动中围绕着旋转轴的旋转角度大小.
被返回的角度是在开始和结束帧之间以顺时针方向围绕着旋转轴的弧度法表示的(使用右手规则)。这个值一般是在0和pi弧度之间(0和180度)。
float rotationInFrame = frame.rotationAngle(startFrame);
Leap Motion软件从在视场中检测到的所有的对象的位置和方向的相对变化中获得帧角度。
如果这个帧或者起始帧有一个是无效的对象,那么这个角度值是0.
参数:
sinceFrame 计算相对角度的起始帧。
返回:
一个正数值,描述了从参数指定的帧到当前帧的测定的角度变化。
Since
1.0
float Leap::Frame::rotationAngle(const Frame&sinceFrame,const Vector & axis) const
从当前帧和特定的帧之间的所有旋转运动中围绕某一指定旋转轴的旋转角度大小.
被返回的角度是在开始和结束帧之间以顺时针方向围绕着旋转轴的弧度法表示的(使用右手规则)。这个值一般是在-pi和pi弧度之间(-180和180度)。
float rotationAroundXAxis = frame.rotationAngle(startFrame, Vector::xAxis());
Leap Motion软件从在视场中检测到的所有的对象的位置和方向的相对变化中获得帧角度。
如果这个帧或者起始帧有一个是无效的对象,那么这个角度值是0.
参数:
sinceFrame 计算相对角度的起始帧。
axis 测定围绕旋转的轴
返回:
一个值,描述了从参数指定的帧到当前帧的测定的围绕着指定的轴的角度变化。
Since
1.0
Leap::Frame::rotationAxis(const & sinceFrame)const
从当前帧和特定的帧之间的所有旋转运动中的旋转坐标。
返回的方向向量是正规化的。
Vector axisOfRotation = frame.rotationAxis(startFrame);
Leap Motion软件从在视场中检测到的所有的对象的位置和方向的相对变化中获得帧角度。
如果这个帧或者起始帧有一个是无效的对象,或者这两个帧之间没有检测到旋转,那么返回一个零向量.
参数:
sinceFrame 计算旋转坐标的起始帧。
返回:
一个正规化的方向向量,描述了从参数指定的帧到当前帧的测定的旋转变化的轴。
Since
1.0
Leap::Frame::rotationMatrix(const & sinceFrame)const
表达从当前帧和特定的帧之间的所有旋转运动的旋转的变换矩阵。
Matrix rotationTransform = frame.rotationMatrix(startFrame);
Leap Motion软件从在视场中检测到的所有的对象的位置和方向的相对变化中获得帧角度。
如果这个帧或者起始帧有一个是无效的对象,那么这个函数返回一个单位矩阵.
参数:
sinceFrame 计算相对旋转的起始帧。
返回:
一个旋转矩阵,描述了从参数指定的帧到当前帧的测定的旋转变化。
Since
1.0
float Leap::Frame::rotationProbability(const & sinceFrame)const
从当前帧和指定的帧之间的所有的动作被确定为是一个旋转动作的估计概率。
float rotationDominance = frame.rotationProbability(startFrame);
如果这个帧或者起始帧有一个是无效的对象,那么这个函数返回0.
参数:
sinceFrame 计算相对旋转的起始帧。
返回:
在0和1之间的一个值,描述了从当前帧和指定的帧之间的所有的动作被确定为是一个旋转动作的估计概率。
Since
1.0
float Leap::Frame::scaleFactor(const & sinceFrame)const
从当前帧和特定的帧之间的所有运动的缩放因子
缩放因子一般是正值。1.0表示没有缩放发生。0.0和1.0之间的值表示收缩,比1.0大的值表示放大。
float zoomFactor = frame.scaleFactor(startFrame);
Leap Motion 软件从视场中检测到的所有物体的相对向内和向外的运动检测缩放(和平移、旋转是独立的)。
如果这个帧或者起始帧有一个是无效的对象,那么这个函数返回1.0.
参数:
sinceFrame 计算相对缩放的起始帧。
返回:
一个正数值,描述了从当前帧和指定的帧之间的所有的动作被检测到的缩放率。
Since
1.0
float Leap::Frame::scaleProbability(const & sinceFrame)const
从当前帧和指定的帧之间的所有的动作被确定为是一个旋转动作的估计概率。
float scaleDominance = frame.scaleProbability(startFrame);
如果这个帧或者起始帧有一个是无效的对象,那么这个函数返回0.
参数:
sinceFrame 计算相对缩放的起始帧。
返回:
在0和1之间的一个值,描述了从当前帧和指定的帧之间的所有的动作被确定为是一个缩放动作的估计概率。
Since
1.0
int64_t Leap::Frame::timestamp()const
以微秒为单位从Leap开始之后的帧的捕获时间。
float framePeriod = frame.timestamp() - controller.frame(1).timestamp();
返回:
以微妙为单位的时间戳。
Sicne
1.0
Leap::Frame::tool(int32_t id)const
具有在这个帧中特定ID的工具对象.
使用
函数从帧中来检索工具对象,使用从前一帧中获得到的ID值。这个函数经常返回一个工具对象,但是如果当前帧中没有具有这个ID这个工具对象,那么一个无效的工具对象将被返回。Tool toolOfInterest = frame.tool(toolID);
注意:这个ID值在多帧之间保留,直到跟踪的这个特殊对象丢失了。如果跟踪的一个工具对象丢失了但是稍后又获得了,代表同一个实际工具的这个新的工具对象可能会和之前的帧中的工具对象具有不同的ID。
参数:
id 从前一帧中获取的工具对象的ID
返回:
匹配这个ID的工具对象,如果在这一帧中不存在,那么返回一个无效的工具对象。
Since
1.0
Tool Leap::Frame::tools()const
以任意的顺序返回,这个帧中检测到的工具对象的列表。
如果没有工具对象检测到,那么这个列表是空的。
ToolList toolsInFrame = frame.tools();
返回:
在帧中检测到的包含所有工具对象的工具列表。
Since
1.0
std::string Leap::Frame::toString()const
一个包含简短的、可读的对这个帧对象的描述的字符串。
返回:
一个描述帧的字符串
Since
1.0
Leap::Frame::translation(const & sinceFrame)const
从当前帧和指定的帧之间的所有线性动作的位置变化.
返回的平移向量提供了以毫米为单位的运动大小和方向。
Vector linearMovement = frame.translation(startFrame);
Leap Motion软件从在视场中检测到的所有物体的线性运动中获得帧平移。
如果这个帧或者起始帧有一个是无效的帧对象,那么这个函数返回0向量.
参数:
sinceFrame 计算相对平移的起始帧。
返回:
一个向量,描述了从当前帧和指定的帧之间的所有的对象的变化的位置。
Since
1.0
float Leap::Frame::translationProbability(const & sinceFrame)const
从当前帧和指定的帧之间的所有的动作被确定为是一个平移动作的估计概率。
float translationDominance = frame.translationProbability(startFrame);
如果这个帧或者起始帧有一个是无效的对象,那么这个函数返回0.
参数:
sinceFrame 计算平移运动的起始帧。
返回:
在0和1之间的一个值,描述了从当前帧和指定的帧之间的所有的动作被确定为是一个平移动作的估计概率。
Since
1.0
友元函数和相关函数文档
std::ostream& operator<<(std::ostream &, const Frame &)
打印一个包含简短的、可读的对这个帧对象的描述到输出流中
std::cout << frame << std::endl;
Since
1.0