【问题标题】:OpenCV OpenNI Java - CV_CAP_OPENNI doesn't existOpenCV OpenNI Java - CV_CAP_OPENNI 不存在
【发布时间】:2013-12-11 22:44:41
【问题描述】:

我正在尝试使用 opencv 2.4.7 和 OpenNI 使一个 Asus Xtion 在 java 中工作(我都安装了)。

我的问题是标志不起作用..

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

没有人在工作,为什么?

【问题讨论】:

    标签: java opencv flags openni


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。以及如何为我的 java 项目编译一个新的 .jar 文件?如果我做一个 cmake 它会生成一个 jar 文件?
    • 你将运行 cmake-gui 来生成 makefiles/projects,选择 BUILD_opencv_java,-jar 文件将与其他二进制文件一起构建
    • 我可以用任何编译器构建?
    【解决方案2】:

    我的猜测是 OpenCV Java Wrapper 可能不支持 OpenNI。 与 c++ API 相比,Java 和 Python 包装器通常受到限制。 通常核心功能已经存在,但较新的/实验性的部分会在稍后出现。

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

    SimpleOpenNI

    OpenCV 处理

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

    【讨论】:

    • 我不想使用Processing,我用了很多但是这次我不想使用它。 OpenNI 支持 java.. 我发现缺少 OpenNI 支持的主要问题是原始的 openCV x 没有在 OpenNI 支持下编译。这个问题是针对 c/c++ 和 java 的。我尝试使用 openni 支持编译 opencv,但还没有成功:/
    • 我之前构建过支持 OpenNI 的 OpenCV。请尝试these instructions 并让我知道您是否设法自己编译带有 OpenNI 支持的 OpenCV。在 c++ 中进行快速测试很容易,但我没有尝试在 Java 中使用 OpenCV OpenNI 支持,所以不确定它是否存在。
    • 我试图关注您的帖子,但我遇到了以下问题:仍然存在“警告:PrimeSense ...”问题。试图对“OpenCVFindOpenNI.cmake”进行更改,但我认为我当前的 opencv 2.4.7 已修复。另外,我正在使用 OpenNI2,在您的帖子中,我认为您使用的是旧版本,而新版本没有“openni64”和“XnCppWrapper.h”。这么多问题:/
    • 是的,我认为这可能是真的。在我之前链接的帖子(stackoverflow.com/questions/16754631/…)中,请注意 OpenNI 链接适用于 OpenNI 1.5。这个post 可能对 OpenNI2 OpenCV 集成很方便,但这可能意味着您需要一个 JNI 层才能使用该 java。如果您需要在 java 中使用 OpenNI 2 和 OpenCV,也许上面的建议可能更简单...
    • ...使用Java OpenNi 2 wrapper 并获取深度/rgb 图像,然后将像素从该格式转换为 Mat 格式并使用 OpenCV 携带。
    【解决方案3】:

    我让 OpenNI 与官方 OpenCV Java 绑定一起工作。 我必须重新编译并启用 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 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多