博主弱鸡一个,最近想利用kinect实现一个rgbd的稠密重建,但又不想基于ros(其实是还没怎么系统学),那咋办,就把kinect单独抽离出来呗。
网上搜了一下,发现大部分都是kinect2的,关于1的比较少,由于博主装这个也花了一天的时间(确实是个弱鸡啊QAQ),现在就来把里面的坑和步骤都说一下,以便后来人参考。
首先,你需要安装openni,sensor和NITE这三个包,博主一开始也是在网上找了几个人的看了下,发现有的要么是64位(博主32位),要么有的链接提供的过时了,下载下来的文件不全,关键博主还不知道是文件问题,在那里解压了半天一直解压错误,搞得博主都快炸了,所以在这里给大家提供一个官网的下载地址http://www.openni.ru/openni-sdk/openni-sdk-history-2/index.html 在这里你可以下载这三个包,博主选择的分别是最后三个1.5,5.1和1.5系列。
下载完后解压(不会的就百度把),然后先安装openni,不出意外会在文件夹里面找到.sh文件,然后sudo ./install.sh即可,接着安装sensor和NITE,都是按照上述方法做,这里没什么难度。于是你就安装完了openni的驱动了,接下来你可以在openni的文件夹里面的例子测试一下,具体在cd sample/bin/x86-release 然后启动里面的二进制文件./NiViewer,不出意外你可以看到你深度相机的画面了,如果报错,说什么sensor not be connect(大概是这句话吧),要么就是你的包不匹配,要么就是你的相机没供电,请注意深度相机不是简单的把usb连上就行。在这里,博主用官网给的系列版本试过,没有问题。ps,如果在解压的时候提示类似与java的错误,请安装sudo apt-get install openjdk-6-jdk,其实博主推荐大家尽量安装README里面做,很多报错的都能找到。。。
最后就是配置opencv啦,其实很简单就是把camke里面的with——openni 的配置改一下,把off改成on,但是博主一开始实在cmake里面直接改的,发现下cmake生成的log里显示openni没有配置好,这就很坑了,博主linux不是很懂啊,怎么办,疯狂百度,终于知道了,实在cmake时加这么一条语句。然后就是简单的make sudo make install 啦。现在opencv的videocapture类就支持kinect啦
cmake -D/ WITH_OPENNI=ON /..
直接上opencv的测试代码
#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <stdio.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
using namespace cv;
using namespace std;
int main(int argc,char** argv) {
VideoCapture capture(900);
for(;;){
Mat depthMap ;
Mat rgbImage ;
capture.grab();
//Depth values in mm (CV_16UC1),d mm
capture.retrieve(depthMap,CV_CAP_OPENNI_DEPTH_MAP);
//color image (CV_8UC3)
capture.retrieve(rgbImage,CV_CAP_OPENNI_BGR_IMAGE);
imshow(rgb_wnd,rgbImage);
imshow(depth_wnd,depthMap);
if ( waitKey(30) >= 0 ) {
break ;
}
}
return 0 ;
}
注意里面的pcl博主由于做三维重建添加的,各位测试不需要,好了,关于如何用opencv使用kinect就到这里了,希望可以帮到你。