您的位置:首页 > 运维架构

kinect2.0 opencv3.2 深度图像提取(方式二)

2017-09-15 16:11 1216 查看
转载请注明出处:http://blog.csdn.net/mystylee/article/details/77992963

由于在网上找提取kinect2.0 + opencv3.2 的资料不是很多,很多都是要么是kinect一代,要么就是opencv 版本不对,经过本人几天的研究,写出关于调取kinect深度图像的几种方式。仅供大家参考。

本人配置:win10 + visual studio 2015 + kinect2.0 + opencv3.2

下文是关于kinect 提取深度图像的第二种方式。

#include <Kinect.h>

#include <iostream>

#include <opencv2\highgui.hpp>

using   namespace   std;

using   namespace   cv;

char file_name[20];

int a = 0;

int main(void)

{
IKinectSensor   * mySensor = nullptr;
GetDefaultKinectSensor(&mySensor);  //获取感应器
mySensor->Open();           //打开感应器

IDepthFrameSource   * mySource = nullptr;   //取得深度数据
mySensor->get_DepthFrameSource(&mySource);

int height = 0, width = 0;
IFrameDescription   * myDescription = nullptr;  //取得深度数据的分辨率
mySource->get_FrameDescription(&myDescription);
myDescription->get_Height(&height);
myDescription->get_Width(&width);
myDescription->Release();

IDepthFrameReader   * myReader = nullptr;
mySource->OpenReader(&myReader);    //打开深度数据的Reader

IDepthFrame * myFrame = nullptr;
Mat temp(height, width, CV_16UC1);    //建立图像矩阵
Mat depthImg(height, width, CV_8UC1);
while (1)
{
if (myReader->AcquireLatestFrame(&myFrame) == S_OK) //通过Reader尝试获取最新的一帧深度数据,放入深度帧中,并判断是否成功获取
{
myFrame->CopyFrameDataToArray(height * width, (UINT16 *)temp.data); //先把数据存入16位的图像矩阵中
temp.convertTo(depthImg, CV_8UC1, 255.0 / 4500);   //再把16位转换为8位
imshow("TEST", depthImg)
4000
;
sprintf(file_name, "depthImg + %d.jpg", a++);
imwrite(file_name, depthImg);
myFrame->Release();
}
if (waitKey(30) == VK_ESCAPE)
break;
}
myReader->Release();        //释放不用的变量并且关闭感应器
mySource->Release();
mySensor->Close();
mySensor->Release();

return  0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: