Tôi không chắc chắn về những gì bạn thực sự mong đợi: Mã tôi cung cấp cho bạn chỉ đơn giản là một ví dụ, để hiển thị cách lưu trữ tệp hoạt động trong các ràng buộc OpenCV C++. Nó giả định ở đây rằng bạn viết vào tệp XML tất cả các Keypoints một cách riêng biệt, với tên của chúng là vị trí của chúng trong vectơ mà chúng được lưu trữ trong.
Nó giả định rằng khi bạn đọc chúng trở lại, bạn biết số của chúng muốn đọc, nếu không, mã sẽ phức tạp hơn một chút. Bạn sẽ tìm thấy một cách (ví dụ bạn đọc filestorage và kiểm tra những gì nó cung cấp cho bạn, nếu nó không cung cấp cho bạn bất cứ điều gì, sau đó nó có nghĩa là không có nhiều điểm để đọc) -Nó chỉ là một ý tưởng, bạn phải tìm một giải pháp, có lẽ đoạn mã này sẽ đủ cho bạn. Tôi nên chính xác rằng tôi sử dụng ostringstream để đặt các số nguyên trong chuỗi và bằng cách thay đổi nơi mà nó sẽ được ghi trong tập tin * .yml.
//TO WRITE
vector<Keypoint> myKpVec;
FileStorage fs(filename,FileStorage::WRITE);
ostringstream oss;
for(size_t i;i<myKpVec.size();++i) {
oss << i;
fs << oss.str() << myKpVec[i];
}
fs.release();
//TO READ
vector<Keypoint> myKpVec;
FileStorage fs(filename,FileStorage::READ);
ostringstream oss;
Keypoint aKeypoint;
for(size_t i;i<myKpVec.size();<++i) {
oss << i;
fs[oss.str()] >> aKeypoint;
myKpVec.push_back(aKeypoint);
}
fs.release();
Julien,
này hoạt động độc đáo. Tôi chỉ cần một ví dụ thực sự về cách xử lý các vòng lặp fileStorage. Cảm ơn – Seb
Rõ ràng FileStorage sẽ không cho phép bạn có số làm khóa. Bạn sẽ gặp lỗi thời gian chạy. "Lỗi OpenCV: Đối số không hợp lệ (Khóa phải bắt đầu bằng một chữ cái hoặc _) trong icvYMLWrite" Phải thêm '_' trước chuỗi số. – DXM