OpenCV OpenNI Java - CV_CAP_OPENNI不存在

时间:2013-11-26 16:47:55

标签: java opencv flags openni

我正在尝试使用opencv 2.4.7和OpenNI(我已安装)在java中创建一个华硕Xtion。

我的问题是旗帜不起作用..

CV_CAP_OPENNI

CV_CAP_OPENNI_DEPTH_MAP

CV_CAP_OPENNI_POINT_CLOUD_MAP

CV_CAP_OPENNI_DISPARITY_MAP

CV_CAP_OPENNI_DISPARITY_MAP_32F

CV_CAP_OPENNI_VALID_DEPTH_MASK

没有人在工作,为什么?

3 个答案:

答案 0 :(得分:0)

查询Core.getBuildInformation()http://docs.opencv.org/java/org/opencv/core/Core.html#getBuildInformation()

看看,如果你的opencv库是用openni支持构建的(可能不是,如果你使用预制的那些)

很可能,您必须重新编译opencv(安装了openni sdk)才能实现它。

答案 1 :(得分:0)

我的猜测是OpenCV Java Wrapper可能不支持OpenNI。 与c ++ API相比,Java和Python包装器通常是有限的。 通常核心功能在那里,但新的/实验部分将在以后进行。

为了在Java中快速进行原型设计,我使用了Processing。 这也可以在eclipse中用作库。 有两个不错的包装器可以提供帮助:SimpleOpenNI连接到您的Xtion传感器(我已经测试了一个,它工作正常)和OpenCV Processing wrapper

SimpleOpenNI

SimpleOpenNI SimpleOpenNI

OpenCV处理

OpenCV Processing

如果您不想使用SimpleOpenNI,可以使用PrimeSense的OpenNI Java包装器(OpenNI 1.5.x的OpenNI安装或OpenNI 2.x的this wrapper)。获得深度/ rgb图像后,应该有办法将它们转换为OpenCV Mat个实例以进行进一步处理。

答案 2 :(得分:0)

我让OpenNI使用官方的OpenCV Java Bindings。 我必须重新编译并启用WITH_OPEN_NI,就像在OpenCV文档中所述,以使Kinect工作。然后,问题是获得OpenNI的常量。看来,就像你说的那样,CV_CAP_OPENNI没有在Java绑定中定义。 代码看起来像这样:

int CV_CAP_OPENNI = 900;
    VideoCapture capture = new VideoCapture(CV_CAP_OPENNI);


    capture.grab();
    Mat depthMap = new Mat();
    int CV_CAP_OPENNI_DEPTH_MAP = 0;
    capture.retrieve( depthMap,  CV_CAP_OPENNI_DEPTH_MAP);
    Mat show = new Mat();
    depthMap.convertTo( show,CvType.CV_8UC1, 0.05f );

从D:\ opencv \ modules \ highgui \ include \ opencv2 \ highgui \ highgui_c.h中提取常量值 我认为最好的方法是检查生成Java类的python脚本,并使它们包含生成jar的那些常量。

Java OpenNI