本系统所使用的开发环境版本是计算机系统Windows 10、Visual Studio 2015、Opencv3.41和Kinect SDK v2.0
一、开发环境配置
1.Visual Studio 2015安装
http://www.afanihao.cn/vs.jsp这个网址直接有vs08到15的版本,选择2015版本的安装。注意:Kinect SDK v2.0需要2012版本以上的。就不用从官方下载那么麻烦了,因为本人也是在这个作者里面的课程学习有关知识。
2.Opencv3.41安装
https://github.com/opencv/opencv/tree/3.4.1当时下载的版本是3.41,opencv版本也在不断更新,每个版本的里面都会有兼容性有变化,我是因为参考了另外一篇博客(下文会给出)它用的是3.0版本,导致后来再VS2015上调试时发生版本冲突X86和x64(下文会给出详细内容)
第一步,配置环境变量。【此电脑】-【(右键)属性】-【高级系统设置】-【环境变量】。如图
,像本人的就是这样的C:\Users\moy\Downloads\opencv\build\x64\v14;C:\Users\moy\Downloads\opencv\build\x64\v15;不同的安装路径添加到内容不一样,不要直接复制本文的,找到自己的安装路径。这样环境变量就配置好了。
温馨提示:环境变量配置好后一般需要重启电脑才会生效。我的windows10就不用重启电脑,可能是系统问题。
第二步,新建一个VS2015的控制台工程,添加一个空cpp源文件。如图,我创建的名字叫ConsoleApplication2
接着点击ConsoleApplication2右键-属性,变成如下图
(1)配置包含目录。【通用属性】-【VC++目录】-【包含目录】,再点击【编辑】按钮,添加opencv安装路径下的include文件夹和其子文件下,本人的是:
C:\Users\moy\Downloads\opencv\build\include
C:\Users\moy\Downloads\opencv\build\include\opencv
C:\Users\moy\Downloads\opencv\build\include\opencv2
配置库目录,方法类似包含目录的配置方法,【通用属性】-【VC++目录】-【库目录】,再点击【编辑】按钮,添加安装路径下的X86文件夹里面的lib文件夹,因为我们一般都是使用win32编译器。本人的是
C:\Users\moy\Downloads\opencv\build\x64\vc14\lib
C:\Users\moy\Downloads\opencv\build\x64\vc15\lib
配置链接库,方法类似。【通用属性】-【连接器】-【输入】-【附加依赖项】,再点击【编辑】按钮。添加安装路径下lib文件夹里面的,lib文件名,opencv3.0的lib文件包含有
opencv_world341.lib
opencv_world341d.lib
其中带d的是debug版本lib文件,不带d的是release版本的lib文件。
经过以上两大步五小步的配置之后,opencv3.0就配置好了。
接着就是调试代码看是否配置好opencv3.0
3.Kinect SDK v2.0
去官网直接下载下来,双击安装就行,然后在VS2015里面添加一下相关的库目录和链接库的附加依赖项。在【包含目录】中加入【$(KINECTSDK20_DIR)\inc】
在【库目录】中加入【$(KINECTSDK20_DIR)\Lib\x86】
在【链接器】的【输入】里,【附加依赖项】中加入【kinect20.lib】。下载地址https://www.microsoft.com/en-us/download/details.aspx?id=44561
调试代码如下,把代码复制到刚刚创建的项目中然后运行调试。
- #include <Kinect.h> //Kinect的头文件
- #include <iostream>
- #include <opencv2\highgui.hpp> //opencv头文件
- using namespace std;
- using namespace cv;
- 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位的图像矩阵中
- 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;
- }
若没有出现错误,弹出对话框表示配置完成恭喜你!
原文参考连接https://blog.csdn.net/baolinq/article/details/52356947(里面博客的opencv版本是Opencv3.0和Visual Studio 2013)
创作不易,希望各位大佬可以资助下,有时间我会把剩下的一系列课程出完。