Java,OpenCV:如何读/写ORB FeatureDetection参数

时间:2015-11-09 00:32:37

标签: android opencv

在OpenCV中,我在Android应用中使用ORB FeatureDetection。它有参数但这些参数不能直接在Java中设置。建议的方法是用params写出XML或YML文件,然后再读回来。

然而,似乎没有办法确定我已经正确地编写了文件并且应用了参数。我以为我可以使用write()方法来验证我的新设置是否已经采用。但这似乎不起作用。它确实编写了一个正确的YML或XML文件,但文件没有参数。

以下是编写文件的代码:

_detector = FeatureDetector.create(FeatureDetector.ORB);

// write initial params. 
String fileName = myDir.getPath() + "/orb_params.yml";
_detector.write(fileName);
fileName = myDir.getPath() + "/orb_params.xml";
_detector.write(fileName);

// try setting some params. 
String tempFileName = writeToFile("tempFile", "%YAML:1.0\nscaleFactor: 1.1\nnLevels: 5\nfirstLevel: 0\nedgeThreshold: 31\npatchSize: 31\n");
_detector.read(tempFileName);

// write params again. 
String fileName = myDir.getPath() + "/orb_params2.yml";
_detector.write(fileName);
fileName = myDir.getPath() + "/orb_params2.xml";
_detector.write(fileName);

xml文件如下所示:

<?xml version="1.0"?>
<opencv_storage>
</opencv_storage>

yml文件如下所示:

%YAML:1.0

写入方法是不是用Java实现的?我看到它是在Algorithm.cpp中实现的,我假设ORB特征检测器只使用该实现,我看不到任何代码来指示其他情况。

我不知道这个问题是否仅限于ORB功能检测,或者当尝试从Java编写参数时其他算法是否会遇到这些问题。

附录:我看到write方法似乎是在JNI代码中实现的:https://github.com/Itseez/opencv/blob/ddf82d0b154873510802ef75c53e628cd7b2cb13/modules/features2d/misc/java/src/cpp/features2d_manual.hpp

1 个答案:

答案 0 :(得分:1)

在answers.opencv.org上有回复,我将在此发布,以便将来遇到这些问题:

根据this answer,读/写功能未在C ++中实现,因此也不适用于Android。