采用opencv读取xtion pro live的数据

来源:互联网 发布:docker web mysql 编辑:程序博客网 时间:2024/06/05 10:46

记得以前读取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.cppINCLUDEPATH +=      /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的数据。

1 0
原创粉丝点击