mirror of
https://github.com/opencv/opencv.git
synced 2025-06-10 11:03:03 +08:00
added read/write functions for vector<DMatch> + the test (http://code.opencv.org/issues/4308)
This commit is contained in:
parent
e0136e39f4
commit
432cf1152a
@ -660,6 +660,7 @@ CV_EXPORTS void write( FileStorage& fs, const String& name, const String& value
|
|||||||
CV_EXPORTS void write( FileStorage& fs, const String& name, const Mat& value );
|
CV_EXPORTS void write( FileStorage& fs, const String& name, const Mat& value );
|
||||||
CV_EXPORTS void write( FileStorage& fs, const String& name, const SparseMat& value );
|
CV_EXPORTS void write( FileStorage& fs, const String& name, const SparseMat& value );
|
||||||
CV_EXPORTS void write( FileStorage& fs, const String& name, const std::vector<KeyPoint>& value);
|
CV_EXPORTS void write( FileStorage& fs, const String& name, const std::vector<KeyPoint>& value);
|
||||||
|
CV_EXPORTS void write( FileStorage& fs, const String& name, const std::vector<DMatch>& value);
|
||||||
|
|
||||||
CV_EXPORTS void writeScalar( FileStorage& fs, int value );
|
CV_EXPORTS void writeScalar( FileStorage& fs, int value );
|
||||||
CV_EXPORTS void writeScalar( FileStorage& fs, float value );
|
CV_EXPORTS void writeScalar( FileStorage& fs, float value );
|
||||||
@ -678,6 +679,7 @@ CV_EXPORTS void read(const FileNode& node, String& value, const String& default_
|
|||||||
CV_EXPORTS void read(const FileNode& node, Mat& mat, const Mat& default_mat = Mat() );
|
CV_EXPORTS void read(const FileNode& node, Mat& mat, const Mat& default_mat = Mat() );
|
||||||
CV_EXPORTS void read(const FileNode& node, SparseMat& mat, const SparseMat& default_mat = SparseMat() );
|
CV_EXPORTS void read(const FileNode& node, SparseMat& mat, const SparseMat& default_mat = SparseMat() );
|
||||||
CV_EXPORTS void read(const FileNode& node, std::vector<KeyPoint>& keypoints);
|
CV_EXPORTS void read(const FileNode& node, std::vector<KeyPoint>& keypoints);
|
||||||
|
CV_EXPORTS void read(const FileNode& node, std::vector<DMatch>& matches);
|
||||||
|
|
||||||
template<typename _Tp> static inline void read(const FileNode& node, Point_<_Tp>& value, const Point_<_Tp>& default_value)
|
template<typename _Tp> static inline void read(const FileNode& node, Point_<_Tp>& value, const Point_<_Tp>& default_value)
|
||||||
{
|
{
|
||||||
|
@ -5594,6 +5594,35 @@ void read(const FileNode& node, std::vector<KeyPoint>& keypoints)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void write(FileStorage& fs, const String& objname, const std::vector<DMatch>& matches)
|
||||||
|
{
|
||||||
|
cv::internal::WriteStructContext ws(fs, objname, CV_NODE_SEQ + CV_NODE_FLOW);
|
||||||
|
|
||||||
|
int i, n = (int)matches.size();
|
||||||
|
for( i = 0; i < n; i++ )
|
||||||
|
{
|
||||||
|
const DMatch& m = matches[i];
|
||||||
|
cv::write(fs, m.queryIdx);
|
||||||
|
cv::write(fs, m.trainIdx);
|
||||||
|
cv::write(fs, m.imgIdx);
|
||||||
|
cv::write(fs, m.distance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void read(const FileNode& node, std::vector<DMatch>& matches)
|
||||||
|
{
|
||||||
|
matches.resize(0);
|
||||||
|
FileNodeIterator it = node.begin(), it_end = node.end();
|
||||||
|
for( ; it != it_end; )
|
||||||
|
{
|
||||||
|
DMatch m;
|
||||||
|
it >> m.queryIdx >> m.trainIdx >> m.imgIdx >> m.distance;
|
||||||
|
matches.push_back(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int FileNode::type() const { return !node ? NONE : (node->tag & TYPE_MASK); }
|
int FileNode::type() const { return !node ? NONE : (node->tag & TYPE_MASK); }
|
||||||
bool FileNode::isNamed() const { return !node ? false : (node->tag & NAMED) != 0; }
|
bool FileNode::isNamed() const { return !node ? false : (node->tag & NAMED) != 0; }
|
||||||
|
|
||||||
|
@ -543,3 +543,13 @@ TEST( Features2d_DescriptorMatcher_FlannBased, regression )
|
|||||||
DescriptorMatcher::create("FlannBased"), 0.04f );
|
DescriptorMatcher::create("FlannBased"), 0.04f );
|
||||||
test.safe_run();
|
test.safe_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST( Features2d_DMatch, read_write )
|
||||||
|
{
|
||||||
|
FileStorage fs(".xml", FileStorage::WRITE + FileStorage::MEMORY);
|
||||||
|
vector<DMatch> matches;
|
||||||
|
matches.push_back(DMatch(1,2,3,4.5f));
|
||||||
|
fs << "Match" << matches;
|
||||||
|
String str = fs.releaseAndGetString();
|
||||||
|
ASSERT_NE( strstr(str.c_str(), "4.5"), (char*)0 );
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user