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;
}