ذخیره و بازیابی برداری از cv::Rect در cv::FileStorage - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

ذخیره و بازیابی برداری از cv::Rect در cv::FileStorage

0 امتیاز

من با توجه به این پست که برداری از struct ها را در فایل .xml ذخیره می کنه را دیدم ولی من نیاز دارم که برداری از cv::Rect را در فایل ذخیره و بازیابی کنیم چطور این کار انجام بدم بدون اینکه مجبور باشم دونه دونه اجزای struct را ذخیره کنم.

 

 

سوال شده اردیبهشت 15, 1396  بوسیله ی abbas nazemi (امتیاز 11)   1 2 2

1 پاسخ

0 امتیاز

خوب فرقی نداره شما به راحتی می تونید با جایگزین کردن Rect به جای Data این کار را انجام بدید در ضمن خود opencv نوع cv::Rect را serialize و deserilize می کنه. کد لینک مربوط را به صورت زیر تغییر دادم.

void loadData(const cv::FileStorage& fs,std::vector<cv::Rect>& datas) {
 
 
    cv::FileNode data_nodes = fs["datas"];
     
    for (auto it = data_nodes .begin(); it != data_nodes.end(); it++) {
                cv::Rect cur_node;
        (*it)] >> cur_node;
        datas.push_back(cur_node);
    }
 
    fs.release();
 
}
 
void saveData(cv::FileStorage& fs,const std::vector<cv::Rect>& datas)
{
 
    fs << "datas" << "[";
    auto it = datas.begin();
    for (int i = 0; i < datas.size(); i++) {
 
        fs <<  data[i];
        it++;
    }
 
    fs << "]";
 
 
    fs.release();
 
}
 
void load(const std::string& file_name){
   cv::FileStorage fs(file_name, cv::FileStorage::READ);
   std::vector<cv::Rect> datas;
   loadData(fs,datas);
   fs.release();
 
}
 
void save(const std::string& file_name){
   cv::FileStorage fs(file_name, cv::FileStorage::WRITE);
   std::vector<cv::Rect> datas;
   saveData(fs,datas);
   fs.release();
}

 

پاسخ داده شده اردیبهشت 20, 1396 بوسیله ی hojat1 (امتیاز 875)   12 69 99
...