我正在尝试使用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
没有人在工作,为什么?
答案 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
OpenCV处理
如果您不想使用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的那些常量。