Kinect开发环境配置:Kinect for Windows SDK + OpenCV2.4.9 + VS2013 + Win8(x86)
来源:互联网 发布:坐标系转换软件 编辑:程序博客网 时间:2024/05/18 19:23
假设VS2013已安装并可以正常使用。
一. 安装和配置Kinect for Windows SDK v1.8
在官方网站(http://www.microsoft.com/en-us/kinectforwindowsdev/Start.aspx)下载Kinect for Windows SDK和Developer Toolkit:
KinectSDK-v1.8-Setup.exe (主要提供Kinect的驱动和设备访问接口)
KinectDeveloperToolkit-v1.8.0-Setup.exe (主要提供一些有助于开发的工具,包括Kinect Studio和多种编程语言的开发例程等)
按照默认选项安装完成后,接入Kinect,系统将会自动的搜索驱动进行安装。打开设备管理器查看驱动是否安装成功:
再打开Developer Toolkit Browser v1.8.0 (Kinect for Windows):
测试读取深度图像的例子:
二. 安装OpenCV2.4.9
从主页(http://opencv.org/)下载安装文件:
- OpenCV for Windows
三. VS2013配置
打开VS2013,新建project,命名为"KinectDepthData"。打开"VIEW"中的"Property Manager",打开"Debug | Win32"下的"Microsoft.Cpp.Win32.user":
OpenCV:
(1) Include files加入E:\opencv\build\include;
(2) Library files加入E:\opencv\build\x86\vc10\lib;
(3) 在Linker的Input中,添加Additional Dependencies(根据需要添加):
opencv_core249d.lib
opencv_highgui249d.lib
opencv_video249d.lib
opencv_imgproc249d.lib
opencv_features2d249d.lib
opencv_nonfree249d.lib
opencv_legacy249d.lib
opencv_calib3d249d.lib
Kinect:
(1) Include files加入C:\Program Files\Microsoft SDKs\Kinect\v1.8\inc;
(2) Library files加入C:\Program Files\Microsoft SDKs\Kinect\v1.8\lib\x86;
(3) 在Linker的Input中,添加Additional Dependencies:
Kinect10.lib
四. 测试用Kinect读取深度图像并用OpenCV显示
/************************************************代码原作者:zouxy09来自:http://http://blog.csdn.net/zouxy09/article/details/8146266Kinect for Windows SDK + OpenCV2读取并显示深度图像************************************************/#include <windows.h>#include <iostream>#include <NuiApi.h>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;int main(int argc, char *argv[]){Mat image;// 这里我们用灰度图来表述深度数据,越远的数据越暗image.create(240, 320, CV_8UC1);// 1. 初始化NUI,注意这里传入的参数有变化,为DEPTHHRESULT hr = NuiInitialize(NUI_INITIALIZE_FLAG_USES_DEPTH);if (FAILED(hr)){cout << "NuiInitialize failed" << endl;return hr;}// 2. 定义事件句柄// 创建读取下一帧的信号事件句柄,控制Kinect是否可以开始读取下一帧数据HANDLE nextColorFrameEvent = CreateEvent(NULL, TRUE, FALSE, NULL);HANDLE depthStreamHandle = NULL; // 保存图像数据流的句柄,用以提取数据// 3. 打开Kinect设备的深度图信息通道,并用depthStreamHandle保存该流的句柄,以便以后读取hr = NuiImageStreamOpen(NUI_IMAGE_TYPE_DEPTH, NUI_IMAGE_RESOLUTION_320x240,0, 2, nextColorFrameEvent, &depthStreamHandle);if (FAILED(hr)) // 判断读取是否正确{cout << "Could not open color image stream video" << endl;NuiShutdown();return hr;}namedWindow("depthImage", CV_WINDOW_AUTOSIZE);// 4. 开始读取深度数据while (true){const NUI_IMAGE_FRAME * pImageFrame = NULL;// 4.1 无限等待新的数据,等到后返回if (WaitForSingleObject(nextColorFrameEvent, INFINITE) == 0){// 4.2 从刚才打开数据流的流句柄中得到该帧数据,读取到的数据地址存于pImageFramehr = NuiImageStreamGetNextFrame(depthStreamHandle, 0, &pImageFrame);if (FAILED(hr)) // 判断读取是否正确{cout << "Could not get depth image" << endl;NuiShutdown();return -1;}INuiFrameTexture * pTexture = pImageFrame->pFrameTexture;NUI_LOCKED_RECT LockedRect;// 4.3 提取数据帧到LockedRect,它包括两个数据对象:Pitch每行字节数,pBits第一个字节地址// 并锁定数据,这样当我们读取数据时,Kinect就不会去修改它pTexture->LockRect(0, &LockedRect, NULL, 0);// 4.4 确定获得的数据是否有效if (LockedRect.Pitch != 0){// 4.5 将数据转换为OpenCV的Mat格式for (int i = 0; i < image.rows; ++i){uchar *ptr = image.ptr<uchar>(i); // 第i行的指针// 深度图像数据含有两种格式,这里像素的低12位表示一个深度值,高4位未使用// 注意这里需要进行转换,因为每个数据是2个字节,存储的同上面获取的颜色信息不一样uchar *pBufferRun = (uchar*)(LockedRect.pBits) + i * LockedRect.Pitch;USHORT *pBuffer = (USHORT*)pBufferRun;for (int j = 0; j < image.cols; ++j){ptr[j] = 255 - (uchar)(256 * pBuffer[j] / 0x0fff); // 直接将数据归一化处理}}imshow("depthImage", image);}else{cout << "Buffer length of received texture is bogus\r\n" << endl;}// 5. 这一帧已经处理完了,所以将其解锁pTexture->UnlockRect(0);// 6. 释放本帧数据,准备迎接下一帧NuiImageStreamReleaseFrame(depthStreamHandle, pImageFrame);}if (cvWaitKey(20) == 27){break;}}// 7. 关闭NUI链接return 0;}
参考资料
Kinect开发学习笔记之(三)Kinect开发环境配置
- Kinect开发环境配置:Kinect for Windows SDK + OpenCV2.4.9 + VS2013 + Win8(x86)
- Win8.1+VS2013+OpenCV2.4.9+Kinect for Windows SDK v1.8开发环境配置
- Kinect开发环境配置:Kinect for Windows SDK(V 1.8) + OpenCV2.4.9 + VS2013 + Win10(x64)
- Kinect开发环境配置:Kinect for Windows SDK + OpenCV2.4.10 + VS2010 + Win7(x64)
- Kinect for Windows SDK 开发环境配置
- Kinect for Windows SDK开发入门(一):开发环境配置
- Kinect for Windows SDK开发入门(一):开发环境配置
- Kinect for Windows SDK开发入门(一):开发环境配置
- Kinect for Windows SDK开发入门(一):开发环境配置
- Kinect for Windows SDK开发入门(一):开发环境配置
- Kinect for Windows SDK开发入门(一):开发环境配置
- Kinect for Windows SDK开发入门(一):开发环境配置
- Kinect for Windows SDK开发入门(一):开发环境配置
- Kinect for Windows SDK开发入门(一):开发环境配置
- Kinect for Windows SDK开发入门(一):开发环境配置
- Kinect for Windows SDK开发入门(一):开发环境配置
- Kinect for windows 开发环境配置
- Kinect for windows SDK 开发
- Java中的String你真的理解了吗?
- JAVA的集合类
- 经纬财富:淮安现货白银如何把握日内短线
- Hdu3791 - 二叉搜索树 - 二叉树
- string stringbuffer stringbuilder 三者的区别
- Kinect开发环境配置:Kinect for Windows SDK + OpenCV2.4.9 + VS2013 + Win8(x86)
- nmap
- Outlook 备份数据、账户、设置
- Codeforces 39E What Has Dirichlet Got to Do with That? 博弈+记忆化搜索
- Java性能的优化
- 初学Swift
- UVA 11927 - Games Are Important(sg函数)
- 机器学习之支持向量机(svm)
- 从BAE到SAE,从SAE又回到BAE