LeapMotion开发(三)--绘制示两个红外摄像头原始图像

 

很多时候单单有一组数据出来不是很直观,所以查了一些资料写了把两个红外摄像头采集到的图片显示到一张图上的小demo

 

关键代码:

ImageList images= frame.images();

 

需要配置的环境:

1.    LeapMotion环境

2.    Opencv环境

 

环境配置参见上一篇博客:

http://blog.csdn.net/zmdsjtu/article/details/52537919

或者:

Opencv环境配置:http://blog.csdn.net/zmdsjtu/article/details/52235056

LeapMotion配置:http://blog.csdn.net/zmdsjtu/article/details/52514270

 

此外需打开右下角LeapMotion控制面板,将允许图像勾选上

 

 代码如下:

#include "Leap.h"
#include "opencv2/opencv.hpp"

using namespace Leap;
using namespace cv;
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) {
	std::cout << "走就走!!!" << std::endl;
}

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());
		//下面是把两张图合并到一张
		int totalRows = A.rows + B.rows;
		cv::Mat mergedDescriptors(totalRows, A.cols, A.type());
		cv::Mat submat = mergedDescriptors.rowRange(0, A.rows);//中间过度的,用以把数据传过去~
		A.copyTo(submat);
		submat = mergedDescriptors.rowRange(A.rows, totalRows);
		B.copyTo(submat);
		imshow("左右摄像头对比图", mergedDescriptors);//合并到mergedDescriptors
		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;
}

可以看出和普通的摄像头还是有一些区别的,靠得近会显得手指很瘦长,哈哈哈

 

 

直观上左右两个输出的图像很近,2333

 



最后祝大家编程愉快: )

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱铭德

五毛也是爱٩(●´৺`●)૭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值