关于OpenNI2和OpenCV2的那些事——获取彩色图和深度图(XtionProLive)

本文介绍了如何使用XtionProLive获取彩色图和深度图,包括初始化环境、读取数据、图像显示以及对彩色图进行放大、水平镜像处理。重点在于使用OpenNI2简化编程过程,以及对深度图和彩色图进行视频模式设置、镜像处理和尺寸调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节讲述了搭环境时遇到的挫折,这一节我们来讲讲如何使用XtionProLive(XtionPro没有彩色摄像头,Live版才有)获取彩色图和数度图,以及彩色图的放大与水平镜像。(PS: 对比两代OpenNI,2真的比1要简洁得多,使用OpenNI2编程序,代码简单易懂。)

首先初始化环境:

OpenNI::initialize();

创建状态:

Status rc = STATUS_OK;
接着声明并打开设备:

Device xtion;
const char * deviceURL = openni::ANY_DEVICE;  //设备名
rc = xtion.open(deviceURL);

创建深度数据流和彩色数据流:

VideoStream streamDepth;
VideoStream streamColor;

打开数据流并对齐彩色/深度图像:

rc = streamDepth.start();
rc = streamColor.start();

// 图像模式注册,彩色图与深度图对齐
if (xtion.isImageRegistrationModeSupported(
<span style="white-space:pre">	</span>IMAGE_REGISTRATION_DEPTH_TO_COLOR))
{
	xtion.setImageRegistrationMode(IMAGE_REGISTRATION_DEPTH_TO_COLOR);
}
从数据流中读取数据保存到VideoFrameRef中并用opencv显示出来:
while (true)
{
	// 读取数据流
	rc = streamDepth.readFrame(&frameDepth);
	if (rc == STATUS_OK)
	{
		// 将深度数据转换成OpenCV格式
		const Mat mImageDepth(frameDepth.getHeight(), frameDepth.getWidth(), CV_16UC1, (void*)frameDepth.getData());
		Mat mScaledDepth, hScaledDepth;
		mImageDepth.convertTo(mScaledDepth, CV_8U, 255.0 / iMaxDepth);
		// 显示出深度图像
	<span style="white-space:pre">	</span>imshow("Depth Image", hScaledDepth);
	}

	rc = streamColor.readFrame(&frameColor);
	if (rc == STATUS_OK)
	{
		// 同样的将彩色图像数据转化成OpenCV格式
		const Mat mImageRGB(frameColor.getHeight(), frameColor.getWidth(), CV_8UC3, (void*)frameColor.getData());
		// 首先将RGB格式转换为BGR格式
		Mat cImageBGR,bImageBGR,hImageBGR;
		cvtColor(mImageRGB, cImageBGR, CV_RGB2BGR);
		// 然后显示彩色图像
		imshow("Color Image", hImageBGR);
	}

	// 终止快捷键
	if (waitKey(1) == 27)
		break;
}

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值