点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 10595|回复: 16

kinect 获取三维点云

[复制链接]
发表于 2013-11-28 17:41:42 | 显示全部楼层 |阅读模式
各位前辈,本人最近在使用kinect做三维重建   在把深度图像保存成PCD文件时  出现形参将不被对齐错误  不知道大家有没有碰到这个问题?    非常感谢
回复

使用道具 举报

发表于 2013-11-30 08:05:28 | 显示全部楼层
出错的代码帖出来看看啊,错误提示具体是什么截图之类的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-6 16:53:10 | 显示全部楼层
不好意思  呵呵  刚看到回复 那个问题已经解决了  还是谢谢你  :)
回复 支持 反对

使用道具 举报

发表于 2013-12-9 22:11:38 | 显示全部楼层
能不把你的代码共享下,因为我现在开始做这个,没什么头绪,谢谢!我的邮箱是1129048487@qq.com 不甚感激!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-10 11:06:07 | 显示全部楼层
  1. #include <iostream>
  2. #include <string>
  3. #include <XnCppWrapper.h>
  4. #include <vector>
  5. #include <C:\Program Files\PCL 1.6.0\include\pcl-1.6\pcl\io\pcd_io.h>
  6. #include <C:\Program Files\PCL 1.6.0\include\pcl-1.6\pcl\point_types.h>
  7. #include "opencv/cv.h"
  8. #include "opencv/highgui.h"

  9. using namespace xn;
  10. using namespace std;
  11. using namespace cv;

  12. //check  error
  13. void CheckOpenNIError( XnStatus eResult, string sStatus )
  14. {
  15.         if( eResult != XN_STATUS_OK )
  16.                 cout << sStatus << " Error: " << xnGetStatusString( eResult ) << endl;
  17. }

  18. //
  19. void GeneratePointCloud( xn::DepthGenerator& rDepthGen,
  20.         const XnDepthPixel* pDepth,
  21.         pcl::PointCloud<pcl::PointXYZI>& cloud )
  22. {
  23.         //  number of point is the number of 2D image pixel
  24.         xn::DepthMetaData mDepthMD;
  25.         rDepthGen.GetMetaData( mDepthMD );
  26.         unsigned int uPointNum = mDepthMD.FullXRes() * mDepthMD.FullYRes();

  27.         // build the data structure for convert
  28.         XnPoint3D* pDepthPointSet = new XnPoint3D[ uPointNum ];
  29.         unsigned int i, j, idxShift, idx;
  30.         for( j = 0; j < mDepthMD.FullYRes(); ++j )
  31.         {
  32.                 idxShift = j * mDepthMD.FullXRes();
  33.                 for( i = 0; i < mDepthMD.FullXRes(); ++i )
  34.                 {
  35.                         idx = idxShift + i;
  36.                         pDepthPointSet[idx].X = (float)i;
  37.                         pDepthPointSet[idx].Y = (float)j;
  38.                         pDepthPointSet[idx].Z = (float)pDepth[idx];
  39.                 }
  40.         }

  41.         //  project points to real world
  42.         XnPoint3D* p3DPointSet = new XnPoint3D[ uPointNum ];
  43.         rDepthGen.ConvertProjectiveToRealWorld( uPointNum, pDepthPointSet, p3DPointSet );
  44.         delete[] pDepthPointSet;
  45.        

  46.         // delete  zero  and count the  nonzero
  47.         int k=0;
  48.         for( i = 0; i < uPointNum; ++ i )
  49.         {
  50.                 // skip the depth 0 points
  51.                 if( p3DPointSet[i].Z !=0 )
  52.                 {
  53.                         k++;
  54.                 }
  55.         }
  56.         //  build point cloud
  57.         cloud.width=k;
  58.         cloud.height=1;
  59.         cloud.is_dense=false;
  60.         cloud.points.resize(cloud.width);
  61.         int l=0;
  62.         for( i = 0; i < uPointNum; ++ i )
  63.         {
  64.                 if(p3DPointSet[i].Z !=0 )
  65.                 {
  66.                         cloud.points[l].x=p3DPointSet[i].X;
  67.                         cloud.points[l].y=p3DPointSet[i].Y;
  68.                         cloud.points[l].z=p3DPointSet[i].Z;
  69.                         cloud.points[l].intensity=0;
  70.                         ++l;
  71.                 }
  72.         }
  73.         delete[] p3DPointSet;
  74.        
  75. }

  76. int main (int argc, char** argv)
  77. {
  78.         int m=0;
  79.         int a=0;
  80.         int b=0;
  81.         int c=0;
  82.         char key=0;

  83.         pcl::PointCloud<pcl::PointXYZI> cloud;
  84.         xn::DepthMetaData m_DepthMD;
  85.         xn::ImageMetaData m_ImageMD;

  86.         // for opencv Mat
  87.         Mat  m_depth16u( 480,640,CV_16UC1);
  88.         Mat  m_rgb8u( 480,640,CV_8UC3);
  89.         Mat  m_DepthShow( 480,640,CV_8UC1);
  90.         Mat  m_ImageShow( 480,640,CV_8UC3);
  91.         //cvNamedWindow("depth");
  92.         //cvNamedWindow("color");


  93.         //Initialize Context
  94.         XnStatus eResult;
  95.         Context  mContext;
  96.         eResult=mContext.Init( );
  97.         CheckOpenNIError( eResult,"Initialize Context" );

  98.         //create depth generator
  99.         DepthGenerator  mDepthgenerator;
  100.         mDepthgenerator.Create( mContext );
  101.         CheckOpenNIError( eResult,"Create Depth generator" );


  102.         //create image generator
  103.         ImageGenerator  mImagegenerator;
  104.         mImagegenerator.Create( mContext );
  105.         CheckOpenNIError( eResult,"Create Image generator" );

  106.         //set MapOutputMode
  107.         XnMapOutputMode mapmode;
  108.         mapmode.nFPS=30;
  109.         mapmode.nXRes=640;
  110.         mapmode.nYRes=480;
  111.         eResult = mDepthgenerator.SetMapOutputMode( mapmode );  
  112.         eResult = mImagegenerator.SetMapOutputMode( mapmode );

  113.         mDepthgenerator.GetAlternativeViewPointCap().SetViewPoint( mImagegenerator );

  114.         eResult= mDepthgenerator.StartGenerating( );
  115.         eResult= mImagegenerator.StartGenerating( );

  116.         while( ( key!=27 ) && !( eResult = mContext.WaitNoneUpdateAll( )) )
  117.         {
  118.                 //  get the  depthmap and  generate 3D point
  119.                 const XnDepthPixel*  pDepthMap = mDepthgenerator.GetDepthMap();
  120.                 GeneratePointCloud( mDepthgenerator, pDepthMap,cloud );


  121.                 mDepthgenerator.GetMetaData( m_DepthMD );
  122.                 mImagegenerator.GetMetaData( m_ImageMD );
  123.                 memcpy(m_depth16u.data,m_DepthMD.Data(),640*480*2);
  124.                 memcpy(m_rgb8u.data,m_ImageMD.Data(),640*480*3);
  125.                 m_depth16u.convertTo(m_DepthShow,CV_8U,255/4096.0);
  126.                 cvtColor(m_rgb8u,m_ImageShow,CV_RGB2BGR);
  127.                 //imshow("depth", m_DepthShow);
  128.                 //imshow("color", m_ImageShow);



  129.                
  130.                
  131.                 /*char filename[100];
  132.                 sprintf(filename,"E://111//%d.pcd",m++);
  133.                 pcl::io::savePCDFile(filename,cloud);

  134.                 char filename1[100];
  135.                 char filename2[100];
  136.                 char filename3[100];
  137.                 sprintf(filename1,"E://111//%d_color.bmp",a++);
  138.                 sprintf(filename2,"E://111//%d_16depth.png",b++);
  139.                 sprintf(filename3,"E://111/%d_depth.bmp",c++);
  140.                 cv::imwrite(filename1,m_ImageShow);
  141.                 cv::imwrite(filename2,m_depth16u);
  142.                 cv::imwrite(filename3,m_DepthShow);*/

  143.                 key=cvWaitKey(20);


  144.         }

  145.         //cvDestroyWindow("depth");   
  146.         //cvDestroyWindow("color");

  147.         mContext.StopGeneratingAll( );
  148.         mContext.Shutdown( );  
  149.         return 0;
  150. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-10 11:07:04 | 显示全部楼层
zhoumin 发表于 2013-12-9 22:11
能不把你的代码共享下,因为我现在开始做这个,没什么头绪,谢谢!我的邮箱是 不甚感激! ...

你也是用kinect 做三维重建是吧  也是刚开始做呢
回复 支持 反对

使用道具 举报

发表于 2013-12-13 14:37:36 | 显示全部楼层
hihaun 发表于 2013-12-10 11:07
你也是用kinect 做三维重建是吧  也是刚开始做呢

是的呢,一头雾水了好几天,没有头绪,能否共享下您的代码,谢谢1129048487@qq.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-16 10:23:05 | 显示全部楼层
共享过了呢
回复 支持 反对

使用道具 举报

发表于 2014-3-13 22:32:47 | 显示全部楼层
本帖最后由 苏菲娅 于 2014-3-14 09:44 编辑

报错:c:\program files\pcl\include\pcl-1.7\pcl\io\pcd_io.h(281): warning C4003: “max”宏的实参不足
1>c:\program files\pcl\include\pcl-1.7\pcl\io\pcd_io.h(281): error C2589: “(”:“::”右边的非法标记
1>c:\program files\pcl\include\pcl-1.7\pcl\io\pcd_io.h(281): error C2988: 不可识别的模板声明/定义
1>c:\program files\pcl\include\pcl-1.7\pcl\io\pcd_io.h(281): error C2059: 语法错误:“::”
已经解决。谢谢。
回复 支持 反对

使用道具 举报

发表于 2014-3-13 22:33:32 | 显示全部楼层
您有过这个错误么?谢谢
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-5-18 04:03 , Processed in 1.794251 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表