如何在文件中存储描述符

OpenCV: How to store descriptors in a file?

本文关键字:存储 描述 文件      更新时间:2023-10-16

我想使用OpenCV的功能检测图像中的对象。我有一些包含这类物体的图像。我搜索其中的关键点,并将这些关键点的描述符存储在物体的轮廓中。基于这些描述符,我想在它们与可能包含或可能不包含对象的图像中的关键点描述符之间进行匹配。

我的问题是在某些情况下(例如:描述符的类型为CV_8U,对于其他类型(例如:SIFT)它们是CV_32F。如果我想把它们存储在一个文件中如果我这样做了:

fileStream << descriptors.ptr<uchar>(rowIdx)[colIdx] << ";";

CV_32F的不确定(但没有错误),其中大多数是255。如果我这样做了:

fileStream << descriptors.ptr<float>(rowIdx)[colIdx] << ";";

CV_8U被存储为4.00897e-075.14004e+19,这也是不可以的。

你建议我怎么做?如果你知道更好的解题方法,请告诉我。

你必须这样做:

cv::FileStorage fsWrite("YourDescriptors.txt", FileStorage::WRITE );
fsWrite["descriptors"] << descriptors;
fsWrite.release();

并从文件中读取:

cv::FileStorage fsRead("YourDescriptors.txt", FileStorage::READ );
fsRead["descriptors"] >>  descriptors;