关于奥比中光OpenNI SDK的环境配置问题
第一次使用奥比中光的Astra pro摄像头,照着官网的视频配置,运行后没有成功,提示错误:main.obj ink 2019 _imp_xxxxx 无法解析的外部符号。几经周折后找到了解决方法。
- 先按照奥比官网上的视频把VS环境配置好。(https://developer.orbbec.com.cn/develop_details.html?id=1)
- 将 windows\SDK\x86\Redist(我配置的是x86、Debug环境)下的所有文件及文件夹拷贝到vs的.exe文件的那个目录下。
- 视频中的代码我没跑出来,自己写了一个。
- 运行完能得到结果
测试代码:
#include<opencv2/opencv.hpp>
#include<OpenNI.h>
using namespace openni;
int main()
{
int m = 2;
//初始化OpenNI SDK
OpenNI::initialize();
//打开设备
Device device;
device.open(ANY_DEVICE);
//创建深度流
VideoStream depthStream;
depthStream.create(device, SENSOR_DEPTH);
//配置深度流的模式
VideoMode depthMode;
depthMode.setResolution(640, 480);
depthMode.setPixelFormat(PIXEL_FORMAT_DEPTH_1_MM);
depthMode.setFps(30);
depthStream.setVideoMode(depthMode);
//打开深度流
depthStream.start();
VideoFrameRef frame;
while (true)
{
VideoStream* pstream = &depthStream;
int changedStreamDummy;
//等待一帧
Status rc = OpenNI::waitForAnyStream(&pstream, 1, &changedStreamDummy, 100);
if (rc != STATUS_OK)
{
continue;
}
//获取深度帧数据
rc = depthStream.readFrame(&frame);
if (rc == STATUS_OK)
{
auto depth = frame.getData();
auto depthWidth = frame.getWidth();
auto depthHeight = frame.getHeight();
//处理并渲染深度帧数据
cv::Mat rawMat(depthHeight, depthWidth, CV_16UC1, (void*)depth);
cv::Mat depthMat;
rawMat.convertTo(depthMat, CV_8UC1);
cv::imshow("Depth Viewer", depthMat);
}
//按ESC退出
int key = cv::waitKey(100);
if (key == 27)
break;
}
depthStream.stop();
depthStream.destroy();
device.close();
OpenNI::shutdown();
return 0;
}