问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用opencv中mat文件

发布网友 发布时间:2022-04-22 13:49

我来回答

2个回答

懂视网 时间:2022-05-10 19:21

这篇文章主要介绍了OpenCV cv.Mat 与 .txt 文件数据的读写操作,现在分享给大家,也给大家做个参考

1、按OpenCV格式实现的 .txt 文件读写
可以用 cvSave 和 cvLoad 实现,格式和 .xml/.yml 的差不多,不过如果专用与 OpenCV 的数据读写,还是用 .xml/.yml 文件格式较好,我比较喜欢 .yml 格式,可读性非常棒。
用 cvSave 和 cvLoad 读写 .txt 文件,其实现方式和数据格式与 .yml 文件基本一致。
例如:cvSave("camera_matrix.txt",camera_matrix); //保存了 camera_matrix 的数组头以及和它所指的data(类似yml形式的文件)

2、导入/导出其它程序的 .txt 文件数据
可以用常规的 sprintf_s 和 fprintf_s 来实现,不过效率比较低,这里介绍一种快捷易用的方法,利用了 std 的 steam 和 vector。

#include <iostream> 
#include <fstream> 
#include <iterator> 
#include <vector> 
 
using namespace std; 
 
/*---------------------------- 
 * 功能 : 将 cv::Mat 数据写入到 .txt 文件 
 *---------------------------- 
 * 函数 : WriteData 
 * 访问 : public 
 * 返回 : -1:打开文件失败;0:写入数据成功;1:矩阵为空 
 * 
 * 参数 : fileName [in] 文件名 
 * 参数 : matData [in] 矩阵数据 
 */ 
int WriteData(string fileName, cv::Mat& matData) 
{ 
 int retVal = 0; 
 
 // 打开文件 
 ofstream outFile(fileName.c_str(), ios_base::out); //按新建或覆盖方式写入 
 if (!outFile.is_open()) 
 { 
 cout << "打开文件失败" << endl; 
 retVal = -1; 
 return (retVal); 
 } 
 
 // 检查矩阵是否为空 
 if (matData.empty()) 
 { 
 cout << "矩阵为空" << endl; 
 retVal = 1; 
 return (retVal); 
 } 
 
 // 写入数据 
 for (int r = 0; r < matData.rows; r++) 
 { 
 for (int c = 0; c < matData.cols; c++) 
 { 
 uchar data = matData.at<uchar>(r,c); //读取数据,at<type> - type 是矩阵元素的具体数据格式 
 outFile << data << "	" ; //每列数据用 tab 隔开 
 } 
 outFile << endl; //换行 
 } 
 
 return (retVal); 
} 
 
 
/*---------------------------- 
 * 功能 : 从 .txt 文件中读入数据,保存到 cv::Mat 矩阵 
 * - 默认按 float 格式读入数据, 
 * - 如果没有指定矩阵的行、列和通道数,则
输出的矩阵是单通道、N 行 1 列的 *---------------------------- * 函数 : LoadData * 访问 : public * 返回 : -1:打开文件失败;0:按设定的矩阵参数读取数据成功;1:按默认的矩阵参数读取数据 * * 参数 : fileName [in] 文件名 * 参数 : matData [out] 矩阵数据 * 参数 : matRows [in] 矩阵行数,默认为 0 * 参数 : matCols [in] 矩阵列数,默认为 0 * 参数 : matChns [in] 矩阵通道数,默认为 0 */ int LoadData(string fileName, cv::Mat& matData, int matRows = 0, int matCols = 0, int matChns = 0) { int retVal = 0; // 打开文件 ifstream inFile(fileName.c_str(), ios_base::in); if(!inFile.is_open()) { cout << "读取文件失败" << endl; retVal = -1; return (retVal); } // 载入数据 istream_iterator<float> begin(inFile); //按 float 格式取文件数据流的起始指针 istream_iterator<float> end; //取文件流的终止位置 vector<float> inData(begin,end); //将文件数据保存至 std::vector 中 cv::Mat tmpMat = cv::Mat(inData); //将数据由 std::vector 转换为 cv::Mat // 输出到命令行窗口 //copy(vec.begin(),vec.end(),ostream_iterator<double>(cout," ")); // 检查设定的矩阵尺寸和通道数 size_t dataLength = inData.size(); //1.通道数 if (matChns == 0) { matChns = 1; } //2.行列数 if (matRows != 0 && matCols == 0) { matCols = dataLength / matChns / matRows; } else if (matCols != 0 && matRows == 0) { matRows = dataLength / matChns / matCols; } else if (matCols == 0 && matRows == 0) { matRows = dataLength / matChns; matCols = 1; } //3.数据总长度 if (dataLength != (matRows * matCols * matChns)) { cout << "读入的数据长度 不满足 设定的矩阵尺寸与通道数要求,将按默认方式输出矩阵!" << endl; retVal = 1; matChns = 1; matRows = dataLength; } // 将文件数据保存至输出矩阵 matData = tmpMat.reshape(matChns, matRows).clone(); return (retVal); }

热心网友 时间:2022-05-10 16:29

Mat类型对应的头文件是"highgui.h",在编译的时候仅仅加上#include "highgui.h" 这句话是不行的,得告诉系统你的作用域是什么,两种办法: 1、在程序的最开始加上: using namespace cv; 2、把Mat改为 cv::Mat 这样就OK啦~
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
可以用电高压锅做蛋糕吗 蛋糕机选哪家实惠? 京东闪付开通后无法添加到applepay怎么办 二年级数学说课稿范文 苹果手机电充到80就不充了怎么回事 上有八,下有八中间有个十字花打一字 ...排名22000.能否上到广工的机械制造和自动化(卓越工程师班)_百度知 ... 把内存由DDR2升级到DDR3,是不是要设置什么东东啊。 怎样吧DDR2的内存条改成DDR3 ...的内存条是DDR2的,我想换DDR3的可以吗?该怎么换?还有该注意什么... 怎么用opencv把mat类型的数组绘制成二维直方图 opencv 中 Mat 数据结构的用法 opencv中MatExpr是什么类型与Mat有什么区别呢 opencv中Mat的数据定义为指向uchar 的指针,而构造函数又提供了许多其他类型 编程问题,某某的MAT指的是什么,比如opencv的mat等等 opencv 中mat类型对应的头文件是什么? 健康管理师2021年考试成绩 matnd 怎么转为 cvarr 健康管理师11月成绩什么时候出来? 404 Not Found 健康管理师证书下来了怎么查询? 怎么查自己的健康管理师证书 健康管理师如何进行成绩查询 健康管理师考完一般多长时间出成绩? 首都医科大学2021年5月30日健康管理师考试成绩查询 健康管理师多久出成绩? 健康管理师成绩查询? 健康管理师考试成绩查询 健康管理师如何查成绩? 健康管理师的成绩在什么网站查询? opencv Mat 多维矩阵如何创建 python opencv中有mat类型吗 如何对win10电脑文件进行加密 opencv 中 mat 的用法 肥肠需要煮多久才能熟 OpenCV 中 IplImage,CvMat,Mat中的type是怎么回事 opencv编程中cvMat到Mat如何进行数据转换? OpenCV中操作Mat的copy和clone的区别 肥肠需要煮多久才能熟? opencv中Mat和数组赋值的几种方法 win10文件夹怎么加密 肥肠煮多久 opencv 中Mat pointsf是什么意思 生肥肠一般要煮多久就熟? win10系统怎么加密文件夹 python opencv 表示mat类型吗 肥肠一般要煮多少时间 win10系统文件怎么加密 肥肠容易熟吗