点云技术相关产学研社区

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

扫一扫,访问微社区

查看: 16961|回复: 22

Kinect+opencv+openNI2获取点云

[复制链接]
发表于 2015-5-9 10:12:27 | 显示全部楼层 |阅读模式
本帖最后由 qq用户 于 2015-12-9 12:45 编辑

如何用kinect结合opencv和openNI2获取带有色彩信息的三维点云
kinect官方驱动下载地址http://pan.baidu.com/s/1i33p0jj
openNI2下载地址http://pan.baidu.com/s/1dDfbgJZ
opencv下载地址http://opencv.org/downloads.html
kinect_Test工程下载地址http://pan.baidu.com/s/1mg3jvPQ
第一步:
  下载和安装kinect驱动,openNI2,opencv,将opencv添加到环境变量
第二步:
  下载kinect_Test工程,给工程配置好opencv和openNI2,编译生成
第三步
  运行该工程,设置点云文件名和获取的影像名,即可以得到三维点云。

回复

使用道具 举报

 楼主| 发表于 2015-5-9 10:14:34 | 显示全部楼层
图片什么的和主题并没有联系
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-9 10:47:41 | 显示全部楼层
点云的截图和点云文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复 支持 反对

使用道具 举报

发表于 2015-5-11 08:56:13 | 显示全部楼层
楼主,Kinect2.0也可以用这个驱动么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-12 15:07:18 | 显示全部楼层
丫丫e 发表于 2015-5-11 08:56
楼主,Kinect2.0也可以用这个驱动么?

并没有试过,但是很可能可以,openNI2本来就是新一代的驱动
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-14 20:59:37 | 显示全部楼层
   利用该工程在获取点云的同时,可以获取深度图像,默认为dist.png。得到的彩色影像是和深度影像对应的,每个像素点代表的是一个三维点。

用下面的函数是可以将该深度图像和彩色图像转化为三维点云:
vector<double> convtD2W(char *a,char*b)
{
        vector<double>data;
        Vec3b color;double wx,wy,wz;
        Vec3b color_;
        Mat img=imread(a,CV_LOAD_IMAGE_COLOR);
        Mat img_color=imread(b,CV_LOAD_IMAGE_COLOR);
        for(int i=0;i<img.cols;i++)
        {
                for(int j=0;j<img.rows;j++)
                {
                        color_=img_color.at<Vec3b>(j,i);
                        color=img.at<Vec3b>(j,i);
                        double l=color.val[0]+256*color.val[1];
                        double nx=(0.0+i)/img.cols-0.5;
                        double ny=0.5-(0.0+j)/img.rows;
                                /*double nx=(0.0+j)/img.rows-0.5;
                                double ny=0.5-(0.0+i)/img.cols;*/
                                //double l=color.val[0]/255.0*10;
                                //wx=sin(nx*3.141592653*2/3.0)*l;
                                //wy=sin(ny*3.141592653/2.0)*l;
                                //wz=sqrt(l*l-wx*wx+wy*wy);
                                wx=nx*l*1.2017212;
                                wy=ny*l*0.90303463;
        /*                        wx=nx*l*0.84072256;
                                wy=ny*l*1.1200538;*/
                                wz=l;
                                if(wx<0.01&&wy<0.01&&wz<0.1)
                                {

                                }
                                else if(l<10000)
                                {
                                        data.push_back(wx);
                                        data.push_back(wy);
                                        data.push_back(wz);
                                        data.push_back(color_.val[0]+0.0);
                                        data.push_back(color_.val[1]+0.0);
                                        data.push_back(color_.val[2]+0.0);
                                }
                       
                       

                }
        }
        return data;
}

由上面的函数得到的三维点云保存在数组当中,再利用以下的函数则可以保存为点云txt文件
void writexyz(char*a,vector<double>data)
{
        FILE *fp=fopen(a,"w");
        for(int i=0;i<data.size()/6;i++)
        {
                fprintf(fp,"%lf %lf %lf %d %d %d\n",data[6*i],data[6*i+1],data[6*i+2],int(data[6*i+3]),int(data[6*i+4]),int(data[6*i+5]));


        }
        fclose(fp);
}

用法实例:
vector<double> pointcloud=convtD2W("dist.png","color.jpg");writexyz("result.txt",pointcloud);



深度图像彩色图像


转换得到的点云截图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-16 14:34:39 | 显示全部楼层
kinect的点云匹配可以用匹配图像上的特征点找到同名点,然后转化成3维同名点,经过剔除粗差点即可实现点云匹配
回复 支持 反对

使用道具 举报

发表于 2015-8-7 10:14:11 | 显示全部楼层
楼主厉害,我试试能不能用在openni1.5上面
回复 支持 反对

使用道具 举报

发表于 2015-8-7 16:42:12 | 显示全部楼层
楼主,我下了你的程序,配置也没问题,为什么编译会出现这么个问题呀?
Error        23        error LNK1120: 22 unresolved externals
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-3 10:52:09 | 显示全部楼层
hzs19900515 发表于 2015-8-7 16:42
楼主,我下了你的程序,配置也没问题,为什么编译会出现这么个问题呀?
Error        23        error LNK1120: 22 unreso ...

你的问题解决了没
回复 支持 反对

使用道具 举报

本版积分规则

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

GMT+8, 2024-5-22 02:06 , Processed in 1.108503 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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