1.Leap Motion的参数说明及介绍
- 介绍
Leap Motion是一款体感摄像头,拥有两个红外摄像头和三个红外灯。在SDK中,Leap Motion的帧率可以到60FPS。拥有两个可选模式(桌面模式、头戴模式),常用来开发开发虚拟现实,其中leap motion自带完善的手势算法,也是该相机的一大竞争力。
- 参数说明
尺寸:80*30*10 mm
质量:约50g
连接口:USB2.0
默认像素:640*240
是否支持同时调用两个内部摄像头:是(无需多线程)
测量范围:官方给出50-400mm 实测:50-2500mm
摄像头类型:双红外摄像头
返回图像类型:8-bit深度图
可用于测量三维精度:???(由于只支持8-bit图?故返回的深度值在0-255区间,无法达到精准三维测量的需求。但是由于其双目的特性,可考虑利用视差进行定位,官方给出的精度在0.01mm)
2.SDK下载及配置
一、下载安装
下载地址https://developer.leapmotion.com/get-started
tip安装的时候记住安装的路径,该安装包无法自定义安装,默认路径为系统盘\Program Files (x86)
点击exe安装完成之后,可以看到右下角状态栏里出现leap motion的小图标,绿色表示连接成功
tip如果出现绿色闪烁,可尝试着右键-观察器,查看有无图像生成。
安装完成之后,也可以尝试着打开SDK里的App Home,可以看到多款demo~
二、环境配置
1.配置系统的环境变量,如下添加
tip:这里要注意,尽管你的电脑是64位的,但由于软件的框架是x86的,所以还是要链接到x86的,同时环境变量配置完成后电脑要注销或重启,相关配置才会生效。
2.配置visual studio(2010,2012,2013)
首先建立空项目
右键项目属性,分别如下配置
至此配置完成
三、打开摄像头代码
#include “Leap.h”
#include <iostream>
// OpenCV Header
#include<opencv2/opencv.hpp>
#include “opencv2/core/core.hpp”
#include “opencv2/highgui/highgui.hpp”
using namespace cv;
using namespace std;
using namespace Leap;
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&);
private:
};
void SampleListener::onInit(const Controller& controller) {
std::cout << “初始化完成~” << std::endl;
}
void SampleListener::onConnect(const Controller& controller) {
std::cout << “正在连接” << std::endl;
}
void SampleListener::onDisconnect(const Controller& controller) {
std::cout << “连接失败” << std::endl;
}
void SampleListener::onExit(const Controller& controller) {
}
void SampleListener::onFrame(const Controller& controller) {
const Frame frame = controller.frame();
ImageList images = frame.images();
Mat A;//左侧红外摄像头
Mat B;//右侧
if (images.count() >= 2)
{
A = Mat(images[0].height(), images[0].width(),CV_8UC1, (void *)images[0].data());
B = Mat(images[1].height(), images[1].width(), CV_8UC1, (void *)images[1].data());
imshow(“left”,A);
imshow(“right”, B);
waitKey(1);
}
}
int main(int argc, char** argv) {
SampleListener listener;
Controller controller;
controller.addListener(listener);
controller.setPolicy(Leap::Controller::POLICY_BACKGROUND_FRAMES);
controller.setPolicy(Leap::Controller::POLICY_IMAGES);
std::cout << “输入Enter退出” << std::endl;
std::cin.get();
controller.removeListener(listener);
return 0;
}