Kinect学习笔记之(一)开发环境配置
Email:809315756@qq.com
https://blog.youkuaiyun.com/qq_37904531
我的Kinect开发平台是:
Windows10+Kinect2.0+VisualStudio2019+opencv4.5,具体安装配置步骤如下:
1、安装 kinect for windows SDK 2.0
安装成功后可以看到:
kinect插电后,电源适配器指示灯为黄色,当kinect通过USB与电脑连接后,电源适配器指示灯变为白色(这一点并不能区分USB2.0和3.0,因为都会变为白色)。
启动SDK Browser v2.0
其中第一个Kinect Configuration Verifier是kinect自检程序,运行后
USB Controller显示警告不影响正常开发使用,可不用理会,只要没有出现x就代表正常。
2.在VS2019中配置Kinect2.0SDK和OpenCV4.5
新建一个控制台应用程序test3,解决方案->属性->配置中要选择x64 debug,不然会报 “fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突”。
这个问题可以参考博客 https://blog.youkuaiyun.com/tfy1028/article/details/8660823/
接下来设置项目的属性:
(1)VC++目录(包含目录和库目录)
(2)链接器->输入->附加依赖项,添加Kinect20.lib
接下来是配置OpenCV4.5,可以在官网自行下载,解压后记得配置Path环境变量
接下来和添加kinect过程类似
(1)VC++目录中分别添加包含目录,库目录
(2)链接器->输入->附加依赖项
以上便是基本的配置步骤啦,可以用如下的程序做个测试,显示深度图像。
#include <iostream>
// OpenCV 头文件
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
// Kinect for Windows SDK 头文件
#include <Kinect.h>
using namespace std;
int main()
{
cout << "Hello World!\n";
// 1a.获取感应器
IKinectSensor* pSensor = nullptr;
GetDefaultKinectSensor(&pSensor);
// 1b. 打开感应器
pSensor->Open();
// 2a. 取得深度数据
IDepthFrameSource* pFrameSource = nullptr;
pSensor->get_DepthFrameSource(&pFrameSource);
// 2b. 取得深度数据的描述信息(宽、高)
int iWidth = 0;
int iHeight = 0;
IFrameDescription* pFrameDescription = nullptr;
pFrameSource->get_FrameDescription(&pFrameDescription);
pFrameDescription->get_Width(&iWidth);
pFrameDescription->get_Height(&iHeight);
pFrameDescription->Release();
pFrameDescription = nullptr;
// 2c. 取得感应器的“可靠深度”的最大、最小距离
UINT16 uDepthMin = 0, uDepthMax = 0;
pFrameSource->get_DepthMinReliableDistance(&uDepthMin);
pFrameSource->get_DepthMaxReliableDistance(&uDepthMax);
cout << "Reliable Distance: "
<< uDepthMin << " – " << uDepthMax << endl;
// 建立图像矩阵,mDepthImg用来存储16位的图像数据,直接用来显示会接近全黑
//不方便观察,用mImg8bit转换成8位再显示
cv::Mat mDepthImg(iHeight, iWidth, CV_16UC1);
cv::Mat mImg8bit(iHeight, iWidth, CV_8UC1);
cv::namedWindow("DepthImage");
// 3a. 打开深度数据阅读器
IDepthFrameReader* pFrameReader = nullptr;
pFrameSource->OpenReader(&pFrameReader);
// 主循环
while (1)
{
// 4a. 取得最新数据
IDepthFrame* pFrame = nullptr;
if (pFrameReader->AcquireLatestFrame(&pFrame) == S_OK)
{
// 4c. 把数据存入16位图像矩阵中
pFrame->CopyFrameDataToArray(iWidth * iHeight,
reinterpret_cast<UINT16*>(mDepthImg.data));//强制转换数据类型
// 4d. 把16位转换成8位
mDepthImg.convertTo(mImg8bit, CV_8U, 255.0f / uDepthMax);//converto()第一个参数是输出矩阵,第二个是转换类型,第三个是缩放因子,其中4500是深度数据的最大距离
cv::imshow("DepthImage", mImg8bit);
//要改变显示的颜色和效果,就改变从mDepthImg到mImg8bit的转换
// 4e. 释放变量pFrame
pFrame->Release();
}
if (cv::waitKey(30) == VK_ESCAPE) {
break;
}
}
// 3b. 释放变量pFrameReader
pFrameReader->Release();
pFrameReader = nullptr;
// 2d.释放变量pFramesSource
pFrameSource->Release();
pFrameSource = nullptr;
// 1c.关闭感应器
pSensor->Close();
// 1d.释放感应器
pSensor->Release();
pSensor = nullptr;
return 0;
}
此外,如果运行程序出现错误“ 无法启动此程序,因为计算机中丢失opencv_world450.dll。请尝试重新安装改程序已解决此问题”,解决方法如下:
定位到OpenCV的bin目录,我的路径是H:\opencv\opencv\build\x64\vc15\bin,复制如下三个文件到C:\Windows\System32后便可以解决了。可以参考博客:
https://www.cnblogs.com/tansuoxinweilai/p/10424361.html
以上便是VS2019配置Kinect2.0和OpenCV4.5的基本步骤可可能出现错误的解决方法,如果有不足的地方欢迎大家留言指正。大家一起交流,共同进步。