在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
答案 0 :(得分:1)
在answers.opencv.org上有回复,我将在此发布,以便将来遇到这些问题:
根据this answer,读/写功能未在C ++中实现,因此也不适用于Android。