LeapMotion开发(二) |
您所在的位置:网站首页 › leapmotion原理和功能 › LeapMotion开发(二) |
利用Leapmotion提取的掌心的三维坐标在空白画布上画出与手掌位置相对应的一个圆圈。
友情链接: Opencv环境配置:http://blog.csdn.net/zmdsjtu/article/details/52235056 LeapMotion配置:http://blog.csdn.net/zmdsjtu/article/details/52514270
实现功能描述:在官方示例Sample.cpp的基础上提取手掌有效坐标,配置opencv环境利用画圆的函数将三维坐标对应于圆的横纵坐标以及半径。
首先介绍传参部分: palm=hand.palmPosition();
palm为vector。 这是本文最为重要的一行代码,其他诸如opencv显示都是集成的,类似的其他各种数据可以从示例程序的cout里寻找,这里的hand.palmPosition()返回的是一个vector,可以进行一切你想要的操作。
Opencv部分函数部分:
//圆心 Point center = Point(255, 255); //半径 int r = 100; //承载图像 Mat picture(500, 500, CV_8UC3, Scalar(255, 255, 255)); center= Point(palm[0]+320, palm[2]+240); r= palm[1] / 2; circle(picture,center, r, Scalar(0, 0,0)); waitKey(30); waitKey()务必加上。。。血的教训
其中palm[0],palm[1],palm[2]对应这手掌的三围坐标
为了观观赏性把左右挥动加上320作为图像里的横纵,前后加上240为纵坐标,上下毫米数除以2作为半径大小。
整体代码如下: #include #include #include "Leap.h" #include #include #include using namespace cv; using namespace Leap; using namespace std; Vector palm; class SampleListener : public Listener { public: virtual void onInit(const Controller&); virtual void onConnect(const Controller&); virtual void onDisconnect(const Controller&); virtual void onExit(const Controller&); virtual void onFrame(const Controller&); virtual void onFocusGained(const Controller&); virtual void onFocusLost(const Controller&); virtual void onDeviceChange(const Controller&); virtual void onServiceConnect(const Controller&); virtual void onServiceDisconnect(const Controller&); virtual void onServiceChange(const Controller&); virtual void onDeviceFailure(const Controller&); virtual void onLogMessage(const Controller&, MessageSeverity severity, int64_t timestamp, const char* msg); }; const std::string fingerNames[] = { "Thumb", "Index", "Middle", "Ring", "Pinky" }; const std::string boneNames[] = { "Metacarpal", "Proximal", "Middle", "Distal" }; void SampleListener::onInit(const Controller& controller) { std::cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |