Windows下配置OpenNi2(obbrec)
奥比中光-VisualStdio 2019 文档记录,我前几天写了个这,没编译,今天就写编译的事情。
https://developer.orbbec.com.cn/download.html?id=65
SDK的下载位置,下载,解压,记住路径
这些就是给的Demo,我们来使用一个
创建一个空项目
新建一个CPP的文件
#include <stdio.h>
#include <OpenNI.h>
#include "OniSampleUtilities.h"
#define SAMPLE_READ_WAIT_TIMEOUT 2000 //2000ms
using namespace openni;
int main(int argc, char* argv[])
{
//initialize openni sdk
Status rc = OpenNI::initialize();
if (rc != STATUS_OK)
{
printf("Initialize failed
%s
", OpenNI::getExtendedError());
return 1;
}
Device device;
//open device
rc = device.open(ANY_DEVICE);
if (rc != STATUS_OK)
{
printf("Couldn't open device
%s
", OpenNI::getExtendedError());
return 2;
}
VideoStream depth;
//create depth stream
if (device.getSensorInfo(SENSOR_DEPTH) != NULL)
{
rc = depth.create(device, SENSOR_DEPTH);
if (rc != STATUS_OK)
{
printf("Couldn't create depth stream
%s
", OpenNI::getExtendedError());
return 3;
}
}
//start depth stream
rc = depth.start();
if (rc != STATUS_OK)
{
printf("Couldn't start the depth stream
%s
", OpenNI::getExtendedError());
return 4;
}
VideoFrameRef frame;
while (!wasKeyboardHit())
{
int changedStreamDummy;
VideoStream* pStream = &depth;
//wait a new frame
rc = OpenNI::waitForAnyStream(&pStream, 1, &changedStreamDummy, SAMPLE_READ_WAIT_TIMEOUT);
if (rc != STATUS_OK)
{
printf("Wait failed! (timeout is %d ms)
%s
", SAMPLE_READ_WAIT_TIMEOUT, OpenNI::getExtendedError());
continue;
}
//get depth frame
rc = depth.readFrame(&frame);
if (rc != STATUS_OK)
{
printf("Read failed!
%s
", OpenNI::getExtendedError());
continue;
}
//check if the frame format is depth frame format
if (frame.getVideoMode().getPixelFormat() != PIXEL_FORMAT_DEPTH_1_MM && frame.getVideoMode().getPixelFormat() != PIXEL_FORMAT_DEPTH_100_UM)
{
printf("Unexpected frame format
");
continue;
}
DepthPixel* pDepth = (DepthPixel*)frame.getData();
int middleIndex = (frame.getHeight() + 1) * frame.getWidth() / 2;
//print the depth value of the middle pixel of the frame
printf("[%08llu] %8d
", (long long)frame.getTimestamp(), pDepth[middleIndex]);
}
//stop depth stream
depth.stop();
//destroy depth stream
depth.destroy();
//close device
device.close();
//shutdown OpenNI
OpenNI::shutdown();
return 0;
}
把我的代码复制进去
接着开始配置库,或者头的位置。
主要是指明这些地方
项目->属性
SDK的内容
下载的SDK的文件样子
一开始配置这个
添加两个目录
C:orbbecWindows_V2.3.0.66windowsSamplessamplesCommon
C:orbbecWindows_V2.3.0.66windowsSDKx64Include
common,是这个的头文件
这样添加好了库
链接库-> 常规
把DLL文件的路径加入
接着是输入
写一下这个
记得点应用!!!不然保存不了你的设置
如果不保存,会报错误
如果你配置对了,这些地方没有波浪线
F12
是可以打开的
看看我们的设备管理器
我们现在可以编译了,应该是不报错,编译通过
如果运行的话,需要加一些东西。
C:orbbecWindows_V2.3.0.66windowsSamplesin_x64
打开一个SDK的bin位置
是这些
接着你打开现在项目的位置
复制一下
运行结果
好像是要复制过去再编译。。。我应该是搞错顺序了。。。
打个断点
看内容
结果
https://developer.orbbec.com.cn/technical_library/OpenNI2/html/autotoc_md25.html
我们看一下程序的意思,上面是demo的位置
先看引入了三个头文件
接着是一个宏,时间2000ms
下面是一个名称空间,名称空间
OponNI2的头文件引入了这个,在我所指的地方是名称空间所在
一开始就对设备使用了初始化的方法,然后去判断返回值
来确定设备有没有就绪
这个是正确和错误的定义位置
这个这个初始化的方法
这些是可能出现的错误值
上面完成以后,开始创建一个设备的对象
这是位置
开启设备,如果ok的话就好
接着又创建了一个视频流的设备,如果上面的设备信息不为空。接着执行下来的语句,创建一个设备,加两个参数,一个是那会儿的设备,还有就是颜色信息。
你看人家这个代码写的,真有味道。这才是工业代码,兼容性MAX
自己看,深度流是3
下面是建立的对象
颜色传输开始!
没怎么细看
小张这里实在看不懂了,就是里面的这个函数
再继续进入
卡住了
接下来是等待一帧,看看这个函数
参数第二是流计数
看这个参数的流转,有趣嗷
这些是一些错误的结构体封装信息
得到一帧彩色的帧
看下这个读帧的函数
模式+像素的格式 然后匹配后面的串
看下面
看这个函数的样子
彩色
我们再看一下这个初始化的东西
里面都指向了一个结构体
大概是这样的
接着按照分量打印出来
这是这个像素值得结构体
停止彩色流,销毁彩色流对象,关闭设备,关掉OpenNI,向SYS发送0
相关文章
- 最强大脑(量化交易)合约版系统开发源码(搭建部署)
- DFMEA在国产汽油机节流阀体的改进设计中的应用
- mac office苹果电脑
- 《2022年中国文化产业发展概况回望报告》发布——政策与技术双驱动,文化产业发展稳中提质
- 今年嵌入式硬件这块也挺香
- web3.0区块链NFT链游系统开发流程源码部署方案
- 专家说这是阿秀工作迄今为止用的频率最高的13条git命令
- 上岸字节基架后端,这条赛道人少点
- 巨坑警告!校招去银行写代码千万别去分行
- FMEA工作中的常见问题,还有人不知道?
- 这应该就是传说中的"我上岸了我就要把车门焊死"
- 大数据云原生能力成熟度模型,重磅发布!
- 天气预报到底有什么作用?
- 【新春福利】TAPD祝大家新年快乐,兔年大吉!
- 新春祝福已送达,点击查收!
- 【内含抽奖】程序员最喜欢的兔年祝福是什么?
- LeetCode-剑指offer
- 腾讯云开发者2022年度热文盘点
- MyBatis
- MyBatis-Plus