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

我的问题是,对于某些情况(例如ORB),描述符的类型为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;

08-06 07:01