top of page

Leap Motion 赤外線画像表示


Leap Motionではversion 2より赤外線画像を取得出来るようになりました。ただし、kinectのようなdepth mapは取得できない。これは、Leap Motionが100FPSと高速で動くため、すごく軽い処理で手形状を認識しているためである。

今回は、Leap Motionから得られた赤外線画像をopencvで表示します。

// 160110_Leap.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 //

#include "stdafx.h"

#include <Leap.h>

#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp>

#include <string> #include <sstream> #include <iostream>

class SampleListener : public Leap::Listener { public: void onInit(const Leap::Controller& controller) { std::cout << __FUNCTION__ << std::endl; }

void onConnect(const Leap::Controller& controller) { std::cout << __FUNCTION__ << std::endl; }

void onDisconnect(const Leap::Controller& controller) { std::cout << __FUNCTION__ << std::endl; }

void onExit(const Leap::Controller& controller) { std::cout << __FUNCTION__ << std::endl; }

void onFrame(const Leap::Controller& controller) { Leap::Frame frame = controller.frame(); Leap::HandList hands = frame.hands(); Leap::FingerList fingers = frame.fingers(); Leap::PointableList pointables = frame.pointables();

std::cout << "Frame Data : " << "Hands : " << hands.count() << "Fingers : " << fingers.count() << "Extened Fingers : " << fingers.extended().count() << "Pointers : " << pointables.count() << std::endl; }

void onImages(const Leap::Controller& controller) { std::cout << __FUNCTION__ << std::endl;

Leap::Frame frame = controller.frame(); Leap::ImageList images = frame.images();

for (int i = 0; i < 2; i++) { std::ostringstream oss; Leap::Image image = images[i];

// Get the Raw Images cv::Mat result; result.create(image.height(), image.width(), CV_8UC1); // allocate if necessary result.data = (uchar*)image.data();

oss << "Raw Image" << i;

cv::namedWindow(oss.str(), cv::WINDOW_AUTOSIZE); imshow(oss.str(), result); cv::waitKey(1); } }

void onFocusGained(const Leap::Controller& controller) { std::cout << __FUNCTION__ << std::endl; }

void onFocusLost(const Leap::Controller& controller) { std::cout << __FUNCTION__ << std::endl; }

void onServiceConnect(const Leap::Controller& controller) { std::cout << __FUNCTION__ << std::endl; }

void onServiceDisconnect(const Leap::Controller& controller) { std::cout << __FUNCTION__ << std::endl; }

};

int main() { SampleListener listener; Leap::Controller leap; leap.addListener(listener);

// 画像の取得を有効にする leap.setPolicy(Leap::Controller::PolicyFlag::POLICY_IMAGES); std::cin.get(); //cv::waitKey(0);

// 画像消去 cv::destroyAllWindows(); // リスナー消去 leap.removeListener(listener);

return 0; }

参考資料

http://www.buildinsider.net/small/opencv/06#debug

http://stackoverflow.com/questions/29412931/how-to-get-images-from-the-leap-motion-with-opencv

https://community.leapmotion.com/t/get-the-undistorted-images-from-leap/2867


コメント


特集記事
後でもう一度お試しください
記事が公開されると、ここに表示されます。
最新記事
アーカイブ
タグから検索
ソーシャルメディア
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page