C++,OpenCV,如何将vector容器中的一系列cv::Mat类型的3*3矩阵,保存到本地文件?
然后怎么把这些数据从文件读取到vector容器中?
C++,OpenCV,如何将vector容器中的cv::Mat类型的矩阵,保存到本地文件?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 嗷呜大嘴狼 2023-03-12 16:13关注
将vector容器中的一系列cv::Mat类型的3*3矩阵保存到本地文件,可以使用OpenCV自带的文件存储类cv::FileStorage,具体步骤如下:
保存到文件:
#include <opencv2/opencv.hpp> #include <vector> int main() { std::vector<cv::Mat> mats_vec; // 保存cv::Mat类型的vector容器 // ... 在vector容器中添加cv::Mat类型的3*3矩阵 ... cv::FileStorage fs("mats.yml", cv::FileStorage::WRITE); // 打开文件存储类 fs << "mats" << "["; // 写入节点名 for (const auto& mat : mats_vec) { // 遍历vector容器 fs << "{"; fs << "mat" << mat; // 将cv::Mat类型的3*3矩阵写入文件 fs << "}"; } fs << "]"; // 写入结束节点 fs.release(); // 释放文件存储类资源 return 0; }
上述代码将vector容器中的每个cv::Mat类型的3*3矩阵写入到了名为"mats.yml"的文件中,节点名为"mats"。
从文件读取到vector容器中:
#include <opencv2/opencv.hpp> #include <vector> int main() { std::vector<cv::Mat> mats_vec; // 保存cv::Mat类型的vector容器 cv::FileStorage fs("mats.yml", cv::FileStorage::READ); // 打开文件存储类 cv::FileNode node = fs["mats"]; // 获取节点名为"mats"的节点 if (node.type() != cv::FileNode::SEQ) { // 判断节点类型是否为序列 std::cerr << "ERROR: Mats node is not a sequence!\n"; return 1; } for (const auto& mat_node : node) { // 遍历节点序列 cv::Mat mat; mat_node["mat"] >> mat; // 从节点中读取cv::Mat类型的3*3矩阵 mats_vec.push_back(mat); // 将读取到的矩阵添加到vector容器中 } fs.release(); // 释放文件存储类资源 // ... 使用mats_vec容器中的数据 ... return 0; }
上述代码从名为"mats.yml"的文件中读取了名为"mats"的节点,然后遍历节点序列,从每个节点中读取cv::Mat类型的3*3矩阵,最后将读取到的矩阵添加到vector容器中。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 怎么把512还原为520格式
- ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
- ¥15 求高通平台Softsim调试经验
- ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
- ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
- ¥15 栅极驱动低侧烧毁MOSFET
- ¥30 写segy数据时出错3
- ¥100 linux下qt运行QCefView demo报错
- ¥50 F1C100S下的红外解码IR_RX驱动问题
- ¥20 基于matlab的航迹融合 航迹关联 航迹插补