深度彩色图对齐


自己做的基于VS2013+opencv2.4.10+kinect 2.0的深度图和彩色图的显示以及二者的对齐(或配准registration)。希望对大家有帮助。
资源截图
代码片段和文件信息
#include “mykinect.h“
#include 
using namespace std;
using namespace cv;

/// Constructor 构造函数
CMapBasics::CMapBasics()
{
sensor = NULL;
mapper = NULL;
reader = NULL;
dpoint = NULL;

// create heap storage for color pixel data in RGBX format  
m_pColorRGBX = new RGBQUAD[cColorWidth * cColorHeight];

// create heap storage for the coorinate mapping from color to depth  
dpoint = new DepthSpacePoint[cColorWidth * cColorHeight];

//初始化OpenCV数组  
depthImg.create(cDepthHeight cDepthWidth CV_8UC1);
colorImg.create(cColorHeight cColorWidth CV_8UC3);

depthImg.setTo(0); colorImg.setTo(0);
}
/// Destructor  析构函数

CMapBasics::~CMapBasics()
{
if (m_pColorRGBX)
{
delete[] m_pColorRGBX;
m_pColorRGBX = NULL;
}
if (dpoint)
{
delete[] dpoint;
dpoint = NULL;
}
// done with frame reader  
SafeRelease(reader);

// done with coordinate mapper  
SafeRelease(mapper);

if (sensor)
{
sensor->Close();
}
SafeRelease(sensor);
}

// 转换depth图像到Mat  
Mat ConvertMat(const UINT16* pBuffer int nWidth int nHeight USHORT nMinDepth USHORT nMaxDepth)
{
Mat img(nHeight nWidth CV_8UC1);
uchar* p_mat = img.data;

const UINT16* pBufferEnd = pBuffer + (nWidth * nHeight);
while (pBuffer < pBufferEnd)
{
USHORT depth = *pBuffer;

//方法1:将符合边界条件的uint16去尾赋值给Mat,不符合边界的置0
BYTE intensity = static_cast(depth >= nMinDepth) && (depth <= nMaxDepth) ? depth % 256 : 0;

//方法2:直接将uint16去尾赋值给Mat
//BYTE intensity = depth % 256;

*p_mat = intensity;
p_mat++;
++pBuffer;
}
return img;
}

//转换color图像到Mat 
Mat ConvertMat(const RGBQUAD* pBuffer int nWidth int nHeight)
{
Mat img(nHeight nWidth CV_8UC3);
uchar* p_mat = img.data;

const RGBQUAD* pBufferEnd = pBuffer + (nWidth * nHeight);

while (pBuffer < pBufferEnd)
{
*p_mat = pBuffer->rgbBlue;
p_mat++;
*p_mat = pBuffer->rgbGreen;
p_mat++;
*p_mat = pBuffer->rgbRed;
p_mat++;

++pBuffer;
}
return img;
}


int main()
{

CMapBasics myKinect;
HRESULT hr = myKinect.InitKinect();

if (SUCCEEDED(hr)){
while (1){
myKinect.Update();
}

}
else{
cout << “kinect initialization failed!“ << endl;
system(“pause“);
}
}



HRESULT CMapBasics::InitKinect()
{
HRESULT hr;

hr = GetDefaultKinectSensor(&sensor);
if (FAILED(hr))
{
return hr;
}

if (sensor)
{

hr = sensor->Open();


// Initialize the Kinect and get coordinate mapper and the frame reader  
if (SUCCEEDED(hr))
{
hr = sensor->get_CoordinateMapper(&mapper);
}

if (SUCCEEDED(hr))
{
hr = sensor->OpenMultiSourceframeReader(
frameSourceTypes::frameSourceTypes_Depth | frameSourceTypes::frameSourceTypes_Color &reader);
}
}

if (!sensor || FAILED(hr))
{
return E_FAIL;
}

return hr;
}

void CMapBasics::Update()
{
if (!reader)
{
return;
}

HRESULT hr = reader->AcquireLatestframe(&pMultiSourceframe);


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1174  2016-05-21 16:05  registration
egistrationmykinect.h

     文件       1346  2016-05-12 12:26  registration
egistrationopencv2410x64.Debug.props

     文件       1247  2016-05-12 12:32  registration
egistrationopencv2410x64.Release.props

     文件      41144  2016-05-12 15:18  registration
egistrationPCLx64.Debug.props

     文件       7338  2016-05-20 11:17  registration
egistration
egistration.vcxproj

     文件       1065  2016-05-20 11:17  registration
egistration
egistration.vcxproj.filters

     文件       1912  2016-05-21 16:30  registration
egistrationx64Debug
egistration.log

     文件        612  2016-05-21 16:30  registration
egistrationx64Debug
egistration.tlogcl.command.1.tlog

     文件      27268  2016-05-21 16:30  registration
egistrationx64Debug
egistration.tlogCL.read.1.tlog

     文件        488  2016-05-21 16:30  registration
egistrationx64Debug
egistration.tlogCL.write.1.tlog

     文件       2080  2016-05-21 16:30  registration
egistrationx64Debug
egistration.tloglink.command.1.tlog

     文件       5042  2016-05-21 16:30  registration
egistrationx64Debug
egistration.tloglink.read.1.tlog

     文件        480  2016-05-21 16:30  registration
egistrationx64Debug
egistration.tloglink.write.1.tlog

     文件        162  2016-05-21 16:30  registration
egistrationx64Debug
egistration.tlog
egistration.lastbuildstate

     文件    1108992  2016-05-21 16:30  registration
egistrationx64Debugvc120.idb

     文件    1642496  2016-05-21 16:30  registration
egistrationx64Debugvc120.pdb

     文件     331023  2016-05-21 16:30  registration
egistrationx64Debug源.obj

     文件       1899  2016-05-22 13:43  registration
egistrationx64Release
egistration.log

     文件        632  2016-05-22 13:43  registration
egistrationx64Release
egistration.tlogcl.command.1.tlog

     文件      27206  2016-05-22 13:43  registration
egistrationx64Release
egistration.tlogcl.read.1.tlog

     文件        366  2016-05-22 13:43  registration
egistrationx64Release
egistration.tlogcl.write.1.tlog

     文件       2116  2016-05-22 13:43  registration
egistrationx64Release
egistration.tloglink.command.1.tlog

     文件       5336  2016-05-22 13:43  registration
egistrationx64Release
egistration.tloglink.read.1.tlog

     文件        374  2016-05-22 13:43  registration
egistrationx64Release
egistration.tloglink.write.1.tlog

     文件        164  2016-05-22 13:43  registration
egistrationx64Release
egistration.tlog
egistration.lastbuildstate

     文件    1249280  2016-05-22 13:43  registration
egistrationx64Releasevc120.pdb

     文件    1401796  2016-05-22 13:43  registration
egistrationx64Release源.obj

     文件       7069  2016-05-22 13:43  registration
egistration源.cpp

     文件   45809664  2016-05-22 16:56  registration
egistration.sdf

     文件       1336  2016-05-20 11:17  registration
egistration.sln

............此处省略19个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)