Intel RealSense R200 入门教程

1、获取彩色图像

彩色图像

#include <iostream>
#include <pxcsensemanager.h>
#include <opencv2/opencv.hpp>
#define TITLE "Hello RealSense R200 !"		// 系统标题
#define WIDTH 640		// 图像宽度
#define HEIGHT 480		// 图像高度
using namespace cv;
using namespace std;

int main(int argc, char* argv[]) {
	cout << TITLE << endl;
	// 创建实例
	PXCSenseManager* sm = PXCSenseManager::CreateInstance();
	// 启用流组件
	sm->EnableStream(PXCCapture::StreamType::STREAM_TYPE_COLOR, WIDTH, HEIGHT);
	// 初始化实例
	if (sm->Init() < PXC_STATUS_NO_ERROR) {
		cout << "初始化失败!" << endl;
		return EXIT_FAILURE;
	}
	// 创建彩色图
	PXCImage* colorImage;
	// 创建彩色图信息对象
	PXCImage::ImageInfo colorInfo;
	// 创建彩色图数据对象
	PXCImage::ImageData colorData;
	// 循环取流
	while (sm->AcquireFrame(true) >= PXC_STATUS_NO_ERROR) {
		// 取流失败
		if (sm->AcquireFrame(true) < PXC_STATUS_NO_ERROR) {
			cout << "取流失败!" << endl;
			break;
		}
		// 获取样本
		PXCCapture::Sample* sample = sm->QuerySample();
		// 获取色彩图
		colorImage = sample->color;
		// 获取色彩图信息
		colorInfo = sample->color->QueryInfo();
		// 获取一帧图像
		if (colorImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_RGB24, &colorData) < PXC_STATUS_NO_ERROR) {
			cout << "获取帧失败!" << endl;
			break;
		}
		// 创建图像矩阵
		Mat image(Size(colorInfo.width, colorInfo.height), CV_8UC3, colorData.planes[0], colorData.pitches[0] / sizeof(uchar));
		// 释放权限
		colorImage->ReleaseAccess(&colorData);
		// 显示图像
		imshow(TITLE, image);
		// 等待时间
		waitKey(1);
		// 释放图像帧
		sm->ReleaseFrame();
	}
	// 释放实例
	sm->Release();
	cout << "Thank you for using !" << endl;

	return EXIT_SUCCESS;
}

2、获取深度图像

深度图像

#include <iostream>
#include <pxcsensemanager.h>
#include <opencv2/opencv.hpp>
#define TAG "Hello RealSense R200 !"
using namespace cv;
using namespace std;

int main(int argc, char* argv[]) {
	cout << TAG << endl;
	// 创建感知管理器实例
	PXCSenseManager* sm = PXCSenseManager::CreateInstance();
	// 创建是否成功
	if (!sm) {
		cout << "无法创建感知管理器!" << endl;
		return EXIT_FAILURE;
	}
	// 启用深度流组件
	sm->EnableStream(PXCCapture::STREAM_TYPE_DEPTH);
	// 感知管理器实例初始化
	pxcStatus status = sm->Init();
	if (status < PXC_STATUS_NO_ERROR) {
		cout << "实例初始化失败!" << endl;
		return EXIT_FAILURE;
	}
	// 创建深度图
	PXCImage* depthImage;
	// 创建深度图信息对象
	PXCImage::ImageInfo depthInfo;
	// 创建深度图数据对象
	PXCImage::ImageData depthData;
	// 循环取流
	while (sm->AcquireFrame(true) >= PXC_STATUS_NO_ERROR) {
		if (sm->AcquireFrame(true) < PXC_STATUS_NO_ERROR) {
			cout << "循环取流失败!" << endl;
			break;
		}
		// 创建样本对象
		PXCCapture::Sample* sample = sm->QuerySample();
		// 获取深度图
		depthImage = sample->depth;
		// 获取深度图信息
		depthInfo = sample->depth->QueryInfo();
		// 获取深度图像帧数据
		depthImage->AcquireAccess(PXCImage::ACCESS_READ, &depthData);
		// 创建深度图矩阵
		Mat image(Size(depthInfo.width, depthInfo.height), CV_16UC1, depthData.planes[0], depthData.pitches[0] / sizeof(uchar));
		// 释放权限
		depthImage->ReleaseAccess(&depthData);
		// 释放图像帧
		sm->ReleaseFrame();
		// 显示深度图像
		imshow(TAG, image * 15);
		// 等待时间
		waitKey(1);
	}
	// 释放实例
	sm->Release();

	return EXIT_SUCCESS;
}

3、绘制直线

绘制直线

#include <iostream>
#include <opencv2/opencv.hpp>
#include <pxcsensemanager.h>
#define TAG "Hello RealSense R200 !"
#define WIDTH 640
#define HEIGHT 480
using namespace cv;
using namespace std;

int main(int argc, char* argv[]) {
	cout << TAG << endl;
	PXCSenseManager* sm = PXCSenseManager::CreateInstance();
	sm->EnableStream(PXCCapture::StreamType::STREAM_TYPE_COLOR, WIDTH, HEIGHT);
	pxcStatus status = sm->Init();
	if (status < PXC_STATUS_NO_ERROR) {
		cout << "初始化失败!" << endl;
		return EXIT_FAILURE;
	}
	PXCImage* colorImage;
	PXCImage::ImageInfo colorInfo;
	PXCImage::ImageData colorData;
	while (sm->AcquireFrame(true) >= PXC_STATUS_NO_ERROR) {
		if (sm->AcquireFrame(true) < PXC_STATUS_NO_ERROR) {
			cout << "获取帧失败!" << endl;
			return EXIT_FAILURE;
		}
		PXCCapture::Sample* sample = sm->QuerySample();
		colorImage = sample->color;
		colorInfo = sample->color->QueryInfo();
		colorImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_RGB24, &colorData);
		Mat image(Size(colorInfo.width, colorInfo.height), CV_8UC3, colorData.planes[0], colorData.pitches[0] / sizeof(uchar));
		colorImage->ReleaseAccess(&colorData);
		// 绘制直线
		line(image, Point(WIDTH * 0.25, HEIGHT * 0.25), Point(WIDTH * 0.75, HEIGHT * 0.25), Scalar(255, 0, 0), 10, LINE_AA);

		imshow(TAG, image);
		waitKey(1);
		sm->ReleaseFrame();
	}
	sm->Release();

	return EXIT_SUCCESS;
}

4、绘制圆形

绘制圆形

#include <opencv2/opencv.hpp>
#include <pxcsensemanager.h>
#define WIDTH 640
#define HEIGHT 480
using namespace cv;

int main(int argc, char* argv[]) {
	PXCSenseManager* sm = PXCSenseManager::CreateInstance();
	sm->EnableStream(PXCCapture::StreamType::STREAM_TYPE_COLOR, WIDTH, HEIGHT);
	if (sm->Init() < PXC_STATUS_NO_ERROR) {
		return EXIT_FAILURE;
	}
	PXCImage* colorImage;
	PXCImage::ImageInfo colorInfo;
	PXCImage::ImageData colorData;
	while (sm->AcquireFrame(true) >= PXC_STATUS_NO_ERROR) {
		if (sm->AcquireFrame(true) < PXC_STATUS_NO_ERROR) {
			break;
		}
		PXCCapture::Sample* sample = sm->QuerySample();
		colorImage = sample->color;
		colorInfo = sample->color->QueryInfo();
		colorImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_RGB24, &colorData);
		Mat image(Size(colorInfo.width, colorInfo.height), CV_8UC3, colorData.planes[0], colorData.pitches[0] / sizeof(uchar));
		// 绘制圆形
		circle(image, Point(320, 240), 100, Scalar(255, 0, 0), 2, LINE_AA, 0);
		imshow("Draw circle", image);
		waitKey(1);
		colorImage->ReleaseAccess(&colorData);
		sm->ReleaseFrame();
	}
	sm->Release();

	return EXIT_SUCCESS;
}

5、绘制矩形框

![绘制矩形框

#include <opencv2/opencv.hpp>
#include <pxcsensemanager.h>
#define WIDTH 640
#define HEIGHT 480
using namespace cv;

int main(int argc, char* arhv[]) {
	PXCSenseManager* sm = PXCSenseManager::CreateInstance();
	sm->EnableStream(PXCCapture::StreamType::STREAM_TYPE_COLOR, WIDTH, HEIGHT);
	if (sm->Init() < PXC_STATUS_NO_ERROR) {
		return EXIT_FAILURE;
	}
	PXCImage* colorImage;
	PXCImage::ImageInfo colorInfo;
	PXCImage::ImageData colorData;
	while (sm->AcquireFrame(true) >= PXC_STATUS_NO_ERROR) {
		if (sm->AcquireFrame(true) < PXC_STATUS_NO_ERROR) {
			return EXIT_FAILURE;
		}
		PXCCapture::Sample* sample = sm->QuerySample();
		colorImage = sample->color;
		colorInfo = sample->color->QueryInfo();
		if (colorImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_RGB24, &colorData) < PXC_STATUS_NO_ERROR) {
			return EXIT_FAILURE;
		}
		Mat image(Size(colorInfo.width, colorInfo.height), CV_8UC3, colorData.planes[0], colorData.pitches[0] / sizeof(uchar));
		// 绘制矩形框
		rectangle(image, Rect(100, 100, 440, 280), Scalar(255, 0, 0), 2, LINE_AA, 0);
		imshow("Draw rectangle", image);
		waitKey(1);
		colorImage->ReleaseAccess(&colorData);
		sm->ReleaseFrame();
	}
	sm->Release();

	return EXIT_SUCCESS;
}

6、显示文字

显示文字

#include <iostream>
#include <pxcsensemanager.h>
#include <opencv2/opencv.hpp>
#define WIDTH 640		// 图像宽度
#define HEIGHT 480		// 图像高度
#define TAG "Hello RealSense R200 !"
using namespace cv;
using namespace std;

int main(int argc, char* argv[]) {
	cout << TAG << endl;
	// 创建实例
	PXCSenseManager* sm = PXCSenseManager::CreateInstance();
	// 启用彩色图像流组件
	sm->EnableStream(PXCCapture::StreamType::STREAM_TYPE_COLOR, WIDTH, HEIGHT);
	// 初始化实例
	pxcStatus status = sm->Init();
	if (status < PXC_STATUS_NO_ERROR) {
		cout << "初始化失败!状态码:" << status << endl;
		return EXIT_FAILURE;
	}
	// 创建彩色图像对象
	PXCImage* colorImage;
	// 创建彩色图像信息对象
	PXCImage::ImageInfo colorInfo;
	// 创建彩色图像数据对象
	PXCImage::ImageData colorData;
	// 循环取流
	status = sm->AcquireFrame(true);
	while (status >= PXC_STATUS_NO_ERROR) {
		status = sm->AcquireFrame(true);
		if (status < PXC_STATUS_NO_ERROR) {
			cout << "取流失败!状态码:" << status << endl;
			return EXIT_FAILURE;
		}
		// 创建图像样本
		PXCCapture::Sample* sample = sm->QuerySample();
		// 获取彩色图
		colorImage = sample->color;
		// 获取彩色图信息
		colorInfo = sample->color->QueryInfo();
		// 获取彩色图像数据
		colorImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_RGB24, &colorData);
		// 创建图像矩阵
		Mat image(Size(colorInfo.width, colorInfo.height), CV_8UC3, colorData.planes[0], colorData.pitches[0] / sizeof(uchar));
		// 显示文字
		int thickness = 1;						// 线条大小
		Point origin(10, 30);					// 显示位置
		int fontFace = FONT_HERSHEY_COMPLEX;	// 字体样式
		int fontSize = 1;						// 字体大小
		putText(image, TAG, origin, fontFace, fontSize, Scalar(0, 255, 255), thickness, LINE_AA, 0);
		// 显示图像
		imshow(TAG, image);
		// 等待时间
		waitKey(1);
		// 释放权限
		colorImage->ReleaseAccess(&colorData);
		// 释放帧
		sm->ReleaseFrame();
	}
	// 释放实例
	sm->Release();

	return EXIT_SUCCESS;
}

参考文献

  1. Realsense(一)提取彩色和深度视频流并实现pxcimage到mat
  2. Realsense(二)实现pxcimage到mat转化的另一种代码方案
  3. Realsense(三)截取n帧彩色及深度图并保存
  4. Realsense(四)github上一种提取彩色和深度视频流并转为mat的方案
  5. Realsense(五)多人脸实时检测及跟踪代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员龙哥

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值