系统要求、系统配置、开发环境
处理器:支持64位(x64)高主频的处理器 建议:AMD羿龙 X4及以上或intel i3及更快的处理器
内存:4 GB DDR 3 1600MHZ 及更大的内存 建议:8G DDR 3 1600MHZ
USB接口: 内置USB 3.0总线 注意!3.0(U口为蓝色,若不是,可买扩展卡,前提是你的机子必须有PCI-E插槽,否则买新机)
显卡:NVIDIA AMD支持DX11的显卡皆可 win8、8.1建议使用支持Direct X11的显卡 win10建议使用支持Direct X12的显卡
os:windows 8、8.1及更高版本的windows 建议使用:windows 8.1 pro (注意:windows 7不支持)
sdk下载安装及运行官方demo
Windows安装步骤:
Kinect for Windows 2.0下载地址:
https://www.microsoft.com/en-us/download/details.aspx?id=445611、安装 KinectSDK-v2.0_1409-Setup.exe,默认安装即可
2、开始菜单可看到安装后的文件夹,点击SDK Browser v2.0 (Kinect for Windows)可进入官方 demo进行调试摄像头
深度图像获取
windows+vs2013+opencv 保存16位深度图像,格式为png
1、opencv安装+vs2013配置
直接官网下载:http://opencv.org/
安装和配置:http://blog.csdn.net/wzw_ice/article/details/77159741
2、vs项目配置Kinect V2
(1)右键项目,进入项目属性页,选择Debug配置
(2)VC++目录:
包含目录中 添加官方驱动的include文件夹,如:
C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\inc
库目录中 添加依赖库,如:
C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\Lib\x86
(3)链接器->输入->附加依赖项,添加
kinect20.lib
3 个人项目代码(从官方demo提取出来并通过opencv获取深度图像保存为16bit的png)
opencvKinectV2.cpp
#include <windows.h>
#include <Kinect.h> //Kinect的头文件
#include <iostream>
#include <opencv2/opencv.hpp> //opencv头文件
using namespace std;
using namespace cv;
void depth2color(cv::Mat & color, const cv::Mat & depth, const double max, const double min)
{
cv::Mat grayImage;
double alpha = 255.0 / (max - min);
depth.convertTo(grayImage, CV_8UC1, alpha, -alpha * min);// expand your range to 0..255. Similar to histEq();
cv::applyColorMap(grayImage, color, cv::COLORMAP_JET);// this is great. It converts your grayscale image into a tone-mapped one, much more pleasing for the eye function is found in contrib module, so include contrib.hpp and link accordingly
}
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 img(height, width, CV_8UC1);
while (1)
{
if (myReader->AcquireLatestFrame(&myFrame) == S_OK) //通过Reader尝试获取最新的一帧深度数据,放入深度帧中,并判断是否成功获取
{
myFrame->CopyFrameDataToArray(height * width, (UINT16 *)temp.data); //先把数据存入16位的图像矩阵中
//深度图像保存,以系统时间(毫秒级)命名
SYSTEMTIME sys;
GetLocalTime(&sys);
stringstream ss1, ss2, ss3, ss4;
string str1, str2, str3, str4;
ss1 << (sys.wHour);
ss2 << (sys.wMinute);
ss3 << (sys.wSecond);
ss4 << (sys.wMilliseconds);
str1 = ss1.str();
str2 = ss2.str();
str3 = ss3.str();
str4 = ss4.str();
imshow("DepthOrigin", temp);
imwrite("./depthImage/" + str1 + ":" + str2 + ":" + str3 + ":" + str4 + ".png", temp);
//深度图转伪色彩图
Mat img_color;
double imax = 0, imin = 70000;
int imrow = temp.rows;
int imcol = temp.cols * temp.channels();
for (int i = 0; i < imrow; i++)
{
for (int j = 0; j < imcol; j++)
{
ushort data = temp.at<ushort>(i, j);
if (imin >= data && data != 0)
{
imin = data;
}
if (imax <= data)
{
imax = data;
}
}
}
depth2color(img_color,temp,imax,imin);
imshow("伪彩图",img_color);
if (waitKey(20) == 27)
{
break;
}
//temp.convertTo(img, CV_8UC1, 255.0 / 4500); //再把16位转换为8位
//imshow("TEST", img);
myFrame->Release();
}
if (waitKey(30) == VK_ESCAPE)
break;
}
myReader->Release(); //释放不用的变量并且关闭感应器
mySource->Release();
mySensor->Close();
mySensor->Release();
return 0;
}
深度图转换成伪彩色图
函数:http://blog.csdn.net/wzw_ice/article/details/77163703
相关代码也可在上面的cpp文件代码中找到