奥比中光-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\n%s\n", OpenNI::getExtendedError()); return 1; }
Device device;
//open device rc = device.open(ANY_DEVICE); if (rc != STATUS_OK) { printf("Couldn't open device\n%s\n", 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\n%s\n", OpenNI::getExtendedError()); return 3; } }
//start depth stream rc = depth.start(); if (rc != STATUS_OK) { printf("Couldn't start the depth stream\n%s\n", 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)\n%s\n", SAMPLE_READ_WAIT_TIMEOUT, OpenNI::getExtendedError()); continue; }
//get depth frame rc = depth.readFrame(&frame); if (rc != STATUS_OK) { printf("Read failed!\n%s\n", 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\n"); 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\n", (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:\orbbec\Windows_V2.3.0.66\windows\Samples\samples\Common C:\orbbec\Windows_V2.3.0.66\windows\SDK\x64\Include common,是这个的头文件 这样添加好了库 链接库-> 常规 把DLL文件的路径加入 接着是输入 写一下这个 记得点应用!!!不然保存不了你的设置 如果不保存,会报错误 如果你配置对了,这些地方没有波浪线 F12 是可以打开的 看看我们的设备管理器 我们现在可以编译了,应该是不报错,编译通过 如果运行的话,需要加一些东西。 C:\orbbec\Windows_V2.3.0.66\windows\Samples\bin_x64 打开一个SDK的bin位置 是这些 接着你打开现在项目的位置 复制一下 运行结果 好像是要复制过去再编译。。。我应该是搞错顺序了。。。 打个断点 看内容 结果 https://developer.orbbec.com.cn/technical_library/OpenNI2/html/autotoc_md25.html 我们看一下程序的意思,上面是demo的位置 先看引入了三个头文件 接着是一个宏,时间2000ms 下面是一个名称空间,名称空间 OponNI2的头文件引入了这个,在我所指的地方是名称空间所在 一开始就对设备使用了初始化的方法,然后去判断返回值 来确定设备有没有就绪 这个是正确和错误的定义位置 这个这个初始化的方法 这些是可能出现的错误值 上面完成以后,开始创建一个设备的对象 这是位置 开启设备,如果ok的话就好 接着又创建了一个视频流的设备,如果上面的设备信息不为空。接着执行下来的语句,创建一个设备,加两个参数,一个是那会儿的设备,还有就是颜色信息。 你看人家这个代码写的,真有味道。这才是工业代码,兼容性MAX 自己看,深度流是3 下面是建立的对象 颜色传输开始! 没怎么细看 小张这里实在看不懂了,就是里面的这个函数 再继续进入 卡住了 接下来是等待一帧,看看这个函数 参数第二是流计数 看这个参数的流转,有趣嗷 这些是一些错误的结构体封装信息 得到一帧彩色的帧 看下这个读帧的函数 模式+像素的格式 然后匹配后面的串 看下面 看这个函数的样子 彩色 我们再看一下这个初始化的东西 里面都指向了一个结构体 大概是这样的 接着按照分量打印出来 这是这个像素值得结构体 停止彩色流,销毁彩色流对象,关闭设备,关掉OpenNI,向SYS发送0 |
|