C++11 ifstream和ofstream读写二进制文件
std::ofstream Frame::mfKeyOut("/home/ai/work/tum-data/key.bin", std::ios::binary | std::ios::out); std::ofstream Frame::mfDescOut("/home/ai/work/tum-data/desc.bin", std::ios::binary | std::ios::out); std::ifstream Frame::mfKeyIn("/home/ai/work/tum-data/key.bin", std::ios::binary | std::ios::in); std::ifstream Frame::mfDescIn("/home/ai/work/tum-data/desc.bin", std::ios::binary | std::ios::in); std::vector<cv::KeyPoint> mvKeys, mvKeysRight; cv::Mat mDescriptors, mDescriptorsRight; // the address of vecotr is continous (similar to realloc) void initOut() { std::string keyFileName("/home/ai/work/tum-data/key.bin"); std::string descFileName("/home/ai/work/tum-data/desc.bin"); if(!mfKeyOut || !mfKeyOut.is_open()) { mfKeyOut.open(keyFileName.c_str(), std::ios::binary | std::ios::out); } if(!mfDescOut || !mfDescOut .is_open()) { mfDescOut .open(descFileName.c_str(), std::ios::binary | std::ios::out); } } void initIn() { std::string keyFileName("/home/ai/work/tum-data/key.bin"); std::string descFileName("/home/ai/work/tum-data/desc.bin"); if(!mfKeyIn || !mfKeyIn.is_open()) { mfKeyIn.open(keyFileName.c_str(), std::ios::binary | std::ios::in); } if(!mfDescIn || !mfDescIn .is_open()) { mfDescIn .open(descFileName.c_str(), std::ios::binary | std::ios::in); } } void saveData() { // generate the data for mvKeys and mDescriptors //(*mpORBextractorLeft)(im,cv::Mat(),mvKeys,mDescriptors); save the keypoints, it"s a vector int numKeys = mvKeys.size(); mfKeyOut.write((char*)&numKeys, sizeof(int)); mfKeyOut.write((char*)&mvKeys[0], numKeys * sizeof(cv::KeyPoint)); // save the descriptors, it"s a Mat (nkeypoints, 32, CV_8U) int matSize[2]; matSize[0] = mDescriptors.rows; // nKeyPoints matSize[1] = mDescriptors.cols; // 32 mfDescOut.write((char*)&matSize[0], 2 * sizeof(int)); mfDescOut.write((char*)mDescriptors.data, matSize[0]*matSize[1]*sizeof(char)); } void readData() { int numKeys; mfKeyIn.read((char*)&numKeys, sizeof(int)); mvKeys.resize(numKeys); mfKeyIn.read((char*)&mvKeys[0], numKeys * sizeof(cv::KeyPoint)); int matSize[2]; mfDescIn.read((char*)&matSize[0], 2 * sizeof(int)); if( matSize[0] == 0 ) { mDescriptors.release(); } else { mDescriptors.create(matSize[0], matSize[1], CV_8U); mfDescIn.read((char*)mDescriptors.data, matSize[0]*matSize[1]*sizeof(char)); } } void Close() { if(mfKeyOut.is_open()) { mfKeyOut.close(); } if(mfDescOut.is_open()) { mfDescOut.close(); } if(mfKeyIn.is_open()) { mfKeyIn.close(); } if(mfDescIn.is_open()) { mfDescIn.close(); } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: nginx配置www.conf
- 下一篇: 跟我一起玩Win32开发(21):复制&粘贴&剪贴板操作