采用opencv读取xtion pro live的数据

记得以前读取xtion pro live的深度数据和彩色数据时,主要采用的是直接读取ni的类。采用这种直接的方法比较麻烦,还要写专门的读取的程序,调用ni的函数。现在opencv2集成了openni,可以直接采用videocapture读取深度数据和彩色数据。相比之下,可能有些功能是没有那么齐全。

那么怎么直接用opencv读取openni呢?主要分为以下几个步骤:
1、安装openni库和primesensor的驱动。
参考http://blog.csdn.net/jasmine_shine/article/details/46235911进行安装。

2、安装opencv的时候配置并编译openni。
参考http://www.samontab.com/web/2014/06/installing-opencv-2-4-9-in-ubuntu-14-04-lts/进行opencv的配置。其中,在cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_VTK=ON WITH_OPENNI=ON ..的时候发现选择添加WITH_OPENNI时出现错误,并没有将这个添加进去。于是采用cmake-gui进行配置,将WITH-OPENNI选中,并configure,然后再执行后面的make。个人估计是cmake-gui具有很多直接cmake没有的性能。

3、测试。
本人是基于ubuntu12.04的环境,主要采用QT进行编译。新建一个QT的空工程。
.pro文件:

SOURCES += \
    main.cpp
INCLUDEPATH +=      /usr/local/include \
######opencv######
                    /usr/local/include/opencv \
                    /usr/local/include/opencv2 \

LIBS +=     /usr/local/lib/libopencv_highgui.so \
            /usr/local/lib/libopencv_core.so    \
            /usr/local/lib/libopencv_imgproc.so  \

main.cpp

#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>

using namespace cv;
using namespace std;

int main(){
cout << "opening device(s)" << endl;

VideoCapture sensor1;sensor1.open(CV_CAP_OPENNI_ASUS);
//VideoCapture sensor2;sensor2.open(CV_CAP_OPENNI_ASUS+1);

if( !sensor1.isOpened() ){
    cout << "Can not open capture object 1." << endl;
    return -1;
}

for(;;){
    Mat depth1,depth2;

    if( !sensor1.grab() ){
        cout << "Sensor1 can not grab images." << endl;
        return -1;
    }else if( sensor1.retrieve( depth1, CV_CAP_OPENNI_DEPTH_MAP ) ) imshow("depth1",depth1);

/*    if( !sensor2.grab() ){
        cout << "Sensor2 can not grab images." << endl;
        return -1;
    }else if( sensor2.retrieve( depth2, CV_CAP_OPENNI_DEPTH_MAP ) ) imshow("depth2",depth2);*/

    if( waitKey( 30 ) == 27 )   break;



   }
}

这是videocapture读取的就是CV_CAP_OPENNI_ASUS,因为我是采用的华硕的xtion pro live,如果是kinect,那么就是CV_CAP_OPENNI。
测试程序输出:
输出的深度图这里写图片描述
以上就是16位的原始深度数据。

4、备注
出现问题一:
以上仅仅只是采用QT进行opencv的测试,而直接采用cmake却出现了以下错误:

*You should manually point CMake variable OpenCV_DIR to your build of OpenCV library.
Call Stack (most recent call first):
src/CMakeLists.txt:9 (FIND_PACKAGE)`
CMake Warning at /usr/local/opencv-2.4.9/cmake/OpenCVConfig.cmake:161 (message):
Found OpenCV Windows Pack but it has not binaries compatible with your
configuration.*

一般在写cmakelist文件的时候,主要FIND_PACKAGE(OPENCV REQUIRED)和TARGET_LINK_LIBRARIES(MY_TARGET_NAME ${OpenCV_LIBS})就可以了。原因是采用cmake-gui进行编译的时候,有两个OpenCVConfig.cmake文件,一个是在build文件,一个是在cmake文件,而cmake-gui直接默认的是build文件,所以就出现了上述错误。只要将where to build the binaries这一栏的数据改为usr/local/opencv-2.4.9/cmake,进行configure,然后generate,便可。

出现问题二:
以上问题是解决了,但是随后又出现了一个问题:
WARNING: Target “main” requests linking to directory “/usr/lib”. Targets may link only to libraries. CMake is dropping the item.
make[2]: * 没有规则可以创建“../bin/main”需要的目标“/usr/local/opencv-2.4.9/cmake/lib/libopencv_videostab.so.2.4.9”。 停止。
程序在生成可执行文件的时候make不通过,于是cmake-gui又换回以前的usr/local/opencv-2.4.9/build,configure,generate,重新编译一次opencv。当我再次执行make的时候还是出现上述问题。等到我想重装opencv的时候,删除掉安装包文件,再次执行工程的make,发现可以编译通过。估计是make的时候lib链接到了/usr/local/opencv-2.4.9/cmake/lib,但是这个文件下确实没有libopencv_videostab.so.2.4.9这个静态库。

所以,现在既可以在QT下使用opencv,也可以直接采用cmake的形式在ubuntu下使用了。真是百般折腾啊,就是为了能直接用opencv读取xtion pro live的数据。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值