reading/writing trajectories
This commit is contained in:
parent
e048df51ce
commit
e990d5b999
@ -91,6 +91,22 @@ namespace cv
|
||||
template<typename _Tp> inline bool isNan(const Point3_<_Tp>& p)
|
||||
{ return isNan(p.x) || isNan(p.y) || isNan(p.z); }
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/// Read/write poses and trajectories
|
||||
|
||||
CV_EXPORTS bool readPose(const String& file, Affine3f& pose, const String& tag = "pose");
|
||||
CV_EXPORTS bool readPose(const String& file, Affine3d& pose, const String& tag = "pose");
|
||||
|
||||
CV_EXPORTS void writePose(const String& file, const Affine3f& pose, const String& tag = "pose");
|
||||
CV_EXPORTS void writePose(const String& file, const Affine3d& pose, const String& tag = "pose");
|
||||
|
||||
CV_EXPORTS void writeTrajectory(const std::vector<Affine3f>& traj, const String& files_format = "pose%05d.xml", int start = 0, const String& tag = "pose");
|
||||
CV_EXPORTS void writeTrajectory(const std::vector<Affine3d>& traj, const String& files_format = "pose%05d.xml", int start = 0, const String& tag = "pose");
|
||||
|
||||
CV_EXPORTS void readTrajectory(std::vector<Affine3f>& traj, const String& files_format = "pose%05d.xml", int start = 0, int end = INT_MAX, const String& tag = "pose");
|
||||
CV_EXPORTS void readTrajectory(std::vector<Affine3d>& traj, const String& files_format = "pose%05d.xml", int start = 0, int end = INT_MAX, const String& tag = "pose");
|
||||
|
||||
} /* namespace viz */
|
||||
} /* namespace cv */
|
||||
|
||||
|
@ -160,3 +160,85 @@ cv::String cv::viz::VizStorage::generateWindowName(const String &window_name)
|
||||
|
||||
cv::viz::Viz3d cv::viz::get(const String &window_name) { return Viz3d (window_name); }
|
||||
void cv::viz::unregisterAllWindows() { VizStorage::unregisterAll(); }
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/// Read/write poses and trajectories
|
||||
|
||||
namespace cv { namespace viz { namespace impl
|
||||
{
|
||||
template <typename _Tp>
|
||||
bool readPose(const String& file, Affine3<_Tp>& pose, const String& tag)
|
||||
{
|
||||
FileStorage fs(file, FileStorage::READ);
|
||||
if (!fs.isOpened())
|
||||
return false;
|
||||
|
||||
Mat hdr(pose.matrix, false);
|
||||
fs[tag] >> hdr;
|
||||
return !hdr.empty() && hdr.depth() == DataDepth<_Tp>::value;
|
||||
}
|
||||
|
||||
template <typename _Tp>
|
||||
void writePose(const String& file, const Affine3<_Tp>& pose, const String& tag)
|
||||
{
|
||||
FileStorage fs(file, FileStorage::WRITE);
|
||||
fs << tag << Mat(pose.matrix, false);
|
||||
}
|
||||
|
||||
template <typename _Tp>
|
||||
void readTrajectory(std::vector<Affine3<_Tp> >& traj, const String& files_format, int start, int end, const String& tag)
|
||||
{
|
||||
start = max(0, std::min(start, end));
|
||||
end = std::max(start, end);
|
||||
|
||||
std::vector< Affine3<_Tp> > temp;
|
||||
|
||||
for(int i = start; i < end; ++i)
|
||||
{
|
||||
Affine3<_Tp> affine;
|
||||
bool ok = readPose(cv::format(files_format.c_str(), i),affine, tag);
|
||||
if (!ok)
|
||||
break;
|
||||
|
||||
temp.push_back(affine);
|
||||
}
|
||||
traj.swap(temp);
|
||||
}
|
||||
|
||||
template <typename _Tp>
|
||||
void writeTrajectory(const std::vector<Affine3<_Tp> >& traj, const String& files_format, int start, const String& tag)
|
||||
{
|
||||
for(size_t i = 0, index = max(0, start); i < traj.size(); ++i, ++index)
|
||||
writePose(cv::format(files_format.c_str(), index), traj[i], tag);
|
||||
}
|
||||
}}}
|
||||
|
||||
|
||||
bool cv::viz::readPose(const String& file, Affine3f& pose, const String& tag) { return impl::readPose(file, pose, tag); }
|
||||
bool cv::viz::readPose(const String& file, Affine3d& pose, const String& tag) { return impl::readPose(file, pose, tag); }
|
||||
|
||||
void cv::viz::writePose(const String& file, const Affine3f& pose, const String& tag) { impl::writePose(file, pose, tag); }
|
||||
void cv::viz::writePose(const String& file, const Affine3d& pose, const String& tag) { impl::writePose(file, pose, tag); }
|
||||
|
||||
void cv::viz::readTrajectory(std::vector<Affine3f>& traj, const String& files_format, int start, int end, const String& tag)
|
||||
{ impl::readTrajectory(traj, files_format, start, end, tag); }
|
||||
|
||||
void cv::viz::readTrajectory(std::vector<Affine3d>& traj, const String& files_format, int start, int end, const String& tag)
|
||||
{ impl::readTrajectory(traj, files_format, start, end, tag); }
|
||||
|
||||
void cv::viz::writeTrajectory(const std::vector<Affine3f>& traj, const String& files_format, int start, const String& tag)
|
||||
{ impl::writeTrajectory(traj, files_format, start, tag); }
|
||||
|
||||
void cv::viz::writeTrajectory(const std::vector<Affine3d>& traj, const String& files_format, int start, const String& tag)
|
||||
{ impl::writeTrajectory(traj, files_format, start, tag); }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user