转载请注明出处:http://blog.csdn.net/mystylee/article/details/77993374
本人配置:win10 + visual studio 2015 + kinect 2.0 + opencv 3.2
说明:由于本人前面有一个桌子,没有读取到腿部膝盖以下的关节点。如果要测试,请到比较宽阔的地方。
另外,本人将右手关节点的坐标显示了出来。有兴趣的同学可以利用这一深度将其手部分割出来。我在后面的博客中会实现这一功能。
本文主要将彩色图像和人体对应的骨骼图像展现出来。具体代码如下所示:
#include <kinect.h>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/calib3d.hpp>
#include <fstream>
#include <iostream>
using namespace std;
using namespace cv;
void draw(Mat & img, Joint & r_1, Joint & r_2, ICoordinateMapper * myMapper);
HRESULT hr;
int main()
{
IKinectSensor* kinectsensor = nullptr;
IBodyFrameSource* bodySource = nullptr;
IDepthFrameSource* depthSource = nullptr;
IColorFrameSource* colorSource = nullptr;
IBodyFrameReader* bodyReader = nullptr;
IDepthFrameReader* depthReader = nullptr;
IColorFrameReader* colorReader = nullptr;
ICoordinateMapper* coordinateMapper = nullptr;
//Mat skeletonImg(height, width, CV_8UC3);
//skeletonImg.setTo(0);
namedWindow("body");
char file_name[20];
int a = 0;
hr = GetDefaultKinectSensor(&kinectsensor);
if (FAILED(hr))
{
return hr;
}
hr = kinectsensor->Open();
if (FAILED(hr))
{
cout << "kinect open failed!" << endl;
}
hr = kinectsensor->get_ColorFrameSource(&colorSource);
if (FAILED(hr))
{
cout << "colorsource failed!" << endl;
}
hr = kinectsensor->get_BodyFrameSource(&bodySource);
if (FAILED(hr))
{
cout << "bodysource failed!" << endl;
}
hr = kinectsensor->get_DepthFrameSource(&depthSource);
if (FAILED(hr))
{
cout << "depthsource failed!" << endl;
}
hr = colorSource->OpenReader(&colorReader);
if (FAILED(hr))
{
cout << "colorreader failed!" << endl;
}
hr = bodySource->OpenReader(&bodyReader);
if (FAILED(hr))
{
cout << "bodyreader failed!