当前位置:   article > 正文

Kinect2+opencv之Depth篇:显示Kinect2的深度图_kinetcv2相机输出的深度图

kinetcv2相机输出的深度图

目录

一、目的:

1、显示出Kinect2的深度图,

一、参考

1、【翻译】Kinect v2程序设计(C++) Depth编

①总结:good:作者翻译了一个系列的Kinect2的文章,目前测试Color和Depth篇,都能实现,下面是参考后直接实现的代码

2、Kinect2+opencv之Color篇:显示Kinect2的画面

①总结:good:这是我总结的Color,有直接实现的代码

一、步骤

1、创建MFC工程,配置Kinect2和Opencv的环境

2、头文件

①导入Kinect、opencv所需的头文件

 ②测试Kinect代码

3、cpp源文件文件

①安全释放函数:ColorBasics-D2D里面有的直接复制过来

 ②OnInitDialog函数中使用到Test_kinect函数

③Test_kinect:函数

4、运行效果:


一、目的:

1、显示出Kinect2的深度图,

 

一、参考

1、【翻译】Kinect v2程序设计(C++) Depth编

https://www.cnblogs.com/TracePlus/p/4136357.html

①总结:good:作者翻译了一个系列的Kinect2的文章,目前测试Color和Depth篇,都能实现,下面是参考后直接实现的代码

 

2、Kinect2+opencv之Color篇:显示Kinect2的画面

https://blog.csdn.net/qq_40544338/article/details/105392479

①总结:good:这是我总结的Color,有直接实现的代码

 

一、步骤

1、创建MFC工程,配置Kinect2和Opencv的环境

这个再次就不赘述了,网上很多的教程

2、头文件

①导入Kinect、opencv所需的头文件

  1. #include "Kinect.h"
  2. #include "cv.h"
  3. #include <iostream>
  4. #include "opencv2/opencv.hpp"

 ②测试Kinect代码

  1. public:
  2. int Test_kinect2();

3、cpp源文件文件

①安全释放函数:ColorBasics-D2D里面有的直接复制过来

  1. // Safe release for interfaces
  2. template<class Interface>
  3. inline void SafeRelease(Interface *& pInterfaceToRelease)
  4. {
  5. if (pInterfaceToRelease != NULL)
  6. {
  7. pInterfaceToRelease->Release();
  8. pInterfaceToRelease = NULL;
  9. }
  10. }

 ②OnInitDialog函数中使用到Test_kinect函数

③Test_kinect:函数

  1. //功能:显示Kinect2的深度图
  2. //参考:https://www.cnblogs.com/TracePlus/p/4136357.html
  3. int CMyKinect2Dlg::Test_kinect2()
  4. {
  5. //第一步:取得「Sensor」
  6. IKinectSensor* pSensor;//处理Kinect v2预览版的Sensor接口。
  7. HRESULT hResult = S_OK;
  8. hResult = GetDefaultKinectSensor(&pSensor);//取得默认的Sensor
  9. if (FAILED(hResult))
  10. {
  11. std::cout << "Error : GetDefaultKinectSensor" << std::endl;
  12. return -1;
  13. }
  14. hResult = pSensor->Open();//打开Sensor
  15. if (FAILED(hResult))
  16. {
  17. std::cout << "Error : IKinectSensor::Open()" << std::endl;
  18. return -1;
  19. }
  20. // 第二步:从「Sensor」取得「Source」。
  21. IDepthFrameSource* pDepthSource; //取得Depth Frame的Source接口。
  22. hResult = pSensor->get_DepthFrameSource(&pDepthSource);// 从Sensor取得Source
  23. if (FAILED(hResult))
  24. {
  25. std::cerr << "Error : IKinectSensor::get_DepthFrameSource()" << std::endl;
  26. return -1;
  27. }
  28. // 第三步:「Source」从打开「Reader」
  29. IDepthFrameReader* pDepthReader;//取得Depth Frame的Reader接口。
  30. hResult = pDepthSource->OpenReader(&pDepthReader);//Source打开Reader
  31. if (FAILED(hResult))
  32. {
  33. std::cerr << "Error : IDepthFrameSource::OpenReader()" << std::endl;
  34. return -1;
  35. }
  36. //第四步:从「Reader」取得最新的「Frame」
  37. int width = 512;//Depth数据的尺寸(512×424) 这里为了简化说明,画像尺寸用硬代码来设定,示例程序可以Source取得着Frame信息。
  38. int height = 424;
  39. unsigned int bufferSize = width * height * sizeof(unsigned short);//Depth数据的尺寸
  40. cv::Mat bufferMat(height, width, CV_16SC1);//为了处理Depth数据而准备的OpenCV的cv::Mat类型 //「bufferMat」是16bit的原始的Depth数据,「CV_16SC1」,是把无符号16bit整数(16S) 放入1个channel(C1)并列来表现1个像素的数据格式。(注:应该是CV_16UC1才对)
  41. cv::Mat depthMat(height, width, CV_8UC1);//「depthMat」为了作为图像显示,把Depth数据储存到8bit的范围里的处理。「CV_8UC1」,是表现无符号8bit整数 (8U)的数据格式。
  42. cv::namedWindow("Depth");
  43. while (1)
  44. {
  45. // Frame
  46. IDepthFrame* pDepthFrame = nullptr;//取得Depth数据的Frame接口
  47. hResult = pDepthReader->AcquireLatestFrame(&pDepthFrame);//从Reader取得最新的Frame
  48. if (SUCCEEDED(hResult))
  49. {
  50. hResult = pDepthFrame->AccessUnderlyingBuffer(&bufferSize, reinterpret_cast<UINT16**>(&bufferMat.data));//从Frame取得Depth数据。 取得Depth数据存储数组的指针。这里为了Depth数据可视化,方便变化处理,用cv::Mat类型来获取。
  51. if (SUCCEEDED(hResult))
  52. {
  53. bufferMat.convertTo(depthMat, CV_8U, -255.0f / 4500.0f, 255.0f);//为了显示Depth数据图像,从16bit转换为8bit。如果得到「Frame」,就可以把取出Depth数据,作成图像来可视化
  54. }
  55. }
  56. SafeRelease(pDepthFrame);
  57. // Show Window
  58. cv::imshow("Depth", depthMat);
  59. if (cv::waitKey(30) == VK_ESCAPE)
  60. {
  61. break;
  62. }
  63. }
  64. return 0;
  65. }

4、运行效果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/888076
推荐阅读
相关标签
  

闽ICP备14008679号