OpenCV3のYAMLファイルから機能検出器(例:SIFT)のパラメータを読み込もうとしています。OpenCV3のxml/ymlファイルからアルゴリズムのパラメータを読み書きする方法
私はDocumentationで提案コードを使用しようとしています。しかし、それはまったくコンパイルされません。だから、私は少し
#include "opencv2/opencv.hpp"
#include <opencv2/core/persistence.hpp>
#include "opencv2/xfeatures2d.hpp"
using namespace cv::xfeatures2d;
int main() {
cv::Ptr<cv::Feature2D> surf = SURF::create();
cv::FileStorage fs("../surf_params.yaml", cv::FileStorage::WRITE);
if(fs.isOpened()) // if we have file with parameters, read them
{
std::cout << "reading parameters" << std::endl;
surf->read(fs["surf_params"]);
}
else // else modify the parameters and store them; user can later edit the file to use different parameters
{
std::cout << "writing parameters" << std::endl;
cv::Ptr<cv::xfeatures2d::SURF> aux_ptr;
aux_ptr = surf.dynamicCast<cv::xfeatures2d::SURF>();
aux_ptr->setNOctaves(3); // lower the contrast threshold, compared to the default value
{
cv::internal::WriteStructContext ws(fs, "surf_params", CV_NODE_MAP);
aux_ptr->write(fs);
}
}
fs.release();
// cv::Mat image = cv::imread("myimage.png", 0), descriptors;
// std::vector<cv::KeyPoint> keypoints;
// sift->detectAndCompute(image, cv::noArray(), keypoints, descriptors);
return 0;
}
を変更し、それをコンパイルするために作る。しかしパラメータは、読み取りまたはまったく書いていません。
私もこのTransition Guideをチェックし、セクションの「アルゴリズムのインタフェースが」と言っている:一般的なアルゴリズムの使用パターンが変化した
:今、それはスマートポインタのCV :: Ptrはに包まれたヒープ上に作成する必要があります。バージョン2.4では、直接またはスマートポインタを介して、スタック割り当てとヒープ割り当ての両方が許可されていました。
CV_INIT_ALGORITHMマクロとともに、cv :: Algorithmクラスからgetおよびsetメソッドが削除されました。 3.0では、すべてのプロパティがgetProperty/setProperty純粋仮想メソッドのペアに変換されています。その結果、cv :: Algorithmインスタンスを名前で作成して使用することはできません(汎用のAlgorithm :: create(String)メソッドを使用して)、対応するファクトリメソッドを明示的に呼び出す必要があります。
これは、read()およびwrite()関数を使用してXML/YAMLファイルからパラメータを読み書きすることができない可能性があります。
OpenCV3のXML/YAMLファイルからフィーチャディテクタアルゴリズムのパラメータを読み取るにはどうすればよいでしょうか?
ありがとうございます!
チェック[この](のhttp:// stackoverflowのその後
とは条件付きでそのプロパティを復元するためのオプションをお読みください。 com/a/34547718/5008845) – Miki
再生していただきありがとうございます。私は答えを試みたが、うまくいかなかった。私が見つけた元の質問に、より多くの情報を追加します。 – taihu
READモードでファイルを読み込もうとしました – Miki