如果我们想把OpenCV中的矩阵数据类型cv::Mat保存在一个文件中,可以使用如下的代码:

void writeMatToFile(cv::Mat& m, const char* filename) {
ofstream fout(filename);
if(!fout) {
cout<<"File Not Opened"<<endl; return;
}
fout << m;
fout.close();
}

上述代码生成的数据由中括号括起来了,我们如果想导入Matlab做进一步处理的话,最好去掉首尾的中括号,当然,我们可以打开txt,手动删除中括号。如果我们想偷懒,让程序来删除的话,可以使用如下的代码:

void writeMatToFile(cv::Mat& m, const char* filename)
{
ofstream fout(filename);
if(!fout) {
cout<<"File Not Opened"<<endl; return;
}
//fout << m.rows << " " << m.cols << " " << m.dims << endl;
fout << m;
fout.close();
// Delete the begining '[' and ending ']'
fstream file(filename);
string line;
int cnt = ;
fout.open("tmp.txt");
while (!file.eof()) {
getline(file, line);
if (cnt == ) line = line.substr(); // Delete '['
if (cnt == m.rows - ) line.pop_back(); // Delete ']'
fout << line << endl;
++cnt;
}
file.close();
fout.close();
file.open("tmp.txt");
fout.open(filename);
while (!file.eof()) {
getline(file, line);
fout << line << endl;
}
file.close();
fout.close();
system("del tmp.txt");
}

还有一种方法用for循环将每个位置的数据写入文本中,但是这种方法保存下来的值跟上面那种方法稍有些出入,上述方法精度应该更高一些,我也把这种方法列出来作为参考吧:

void writeMatToFile(cv::Mat& m, const char* filename)
{
ofstream fout(filename);
if(!fout) {
cout<<"File Not Opened"<<endl; return;
}
for (int i = ; i < m.rows; ++i) {
for (int j = ; j < m.cols; ++j) {
for (int k = ; k < m.channels(); ++k) {
fout << m.at<float>(i, j * m.channels() + k);
if (j * m.channels() + k < m.cols * m.channels() - ) {
fout << ", ";
}
}
}
if (i < m.rows - ) fout << "; " << endl;
}
fout.close();
}

我们也可以用OpenCV自带的API来完成数据的读和写,我们来看CvMat数据类型的读和写,关于CvMat和cv::Mat之间的转换请猛戳这里

// Save CvMat to .xml file
CvMat *m = cvLoadImageM("image.jpg", CV_LOAD_IMAGE_COLOR);
cvSave("m.yml", m); // Save cv::Mat to .xml file
cv::Mat m;
CvMat cm = m;
cvSave("cm.yml", &cm); // Load .xml file to CvMat
CvFileStorage *fs = cvOpenFileStorage("m.yml", , CV_STORAGE_READ);
CvMat *newM = (CvMat*) cvLoad("m.yml");

Write cv::Mat to a file的更多相关文章

  1. MatLab Load cv::Mat 导入数据

    我们有时候在项目中需要将OpenCV中的cv::Mat导入MatLab进行分析与处理,那么如果把数据转过去呢,我们的做法是首先将cv::Mat导出为txt文件,或者是yml文件,请参见我之前的博客Wr ...

  2. [opencvjichu]cv::Mat::type() 返回值

    opencv opencv中Mat存在各种类型,其中mat有一个type()的函数可以返回该Mat的类型.类型表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_(位 ...

  3. cv::Mat到YUV420的转换《转》

    某些特定场合我们会经常遇到yuv420格式的视频文件,这种视频帧无法直接用于opencv,故而,需要进行格式转换:幸运的是,opencv提供了rgb到yuv420的格式转换函数:下面给出基本用法: 函 ...

  4. 访问cv::Mat中的数据时遇到的指针类型问题

    在用Opencv的时候由于下图原本的图像尺寸是1111*1111,要进行resize,代码如下: cv::Mat img = cv::imread("//Users//apple//td3/ ...

  5. OpenCV 3.0 CvMat and cv::Mat Conversion

    After OpenCV 3.0, CvMat cannot be directly converted to cv::Mat, we need to use function cvarrToMat( ...

  6. Convert between cv::Mat and QImage 两种图片类转换

    在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...

  7. CvMat and cv::Mat

    CvMat: typedef struct CvMat { int type; int step; /* for internal use only */ int* refcount; int hdr ...

  8. cv::mat转换成QImage的问题

    在进行cv::mat转换为QImage过程中,经常出现问题: cv::Mat image; ...QImage img=QImage((const unsigned char*)(image.data ...

  9. OpenCV图片类cv::Mat和QImage之间进行转换(好多相关文章)

    在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...

随机推荐

  1. 转MYSQL学习(三) 函数

    这一节主要介绍MYSQL里的函数,MYSQL里的函数很多,我这里主要介绍MYSQL里有而SQLSERVER没有的函数 数学函数 1.求余函数MOD(X,Y) MOD(X,Y)返回x被y除后的余数,MO ...

  2. Java for LeetCode 059 Spiral Matrix II

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...

  3. windows电脑变成wifi热点命令

    netsh wlan set hostednetwork mode=allow ssid=WIFI_NAME key="abcdefgh" netsh wlan start hos ...

  4. JavaScript、Jquery选择题

    尚学堂Java EE软件工程师认证考试 试题库-选择题     一.    选择题(包括单选和双选) 1.B 在JavaScript中,以下变量命名非法的是(   )(选择一项) A. numb_1 ...

  5. eclipse静态部署tomcat

  6. Linux命令--文件权限和磁盘管理

    1.chmod chmod [ugoa][+-=][rwx] file 改变目录或者文件的权限. u是user,g是group,o是other,a是all. +是添加权限,-是去掉权限,=改变权限为. ...

  7. Ubuntu和windows共享文件夹

    参考文章: http://www.cnblogs.com/zhengyuxin/articles/1938414.html

  8. [编辑器] Tab转换成空格

    Notepad++: 设置 -> 首选项 -> 制表符设置 怎样设置EditPlus中Tab用空格替换http://jingyan.baidu.com/article/63f236280b ...

  9. 以多个实例方式打开Notepad++

    Right-click any Notepad++ shortcut. Select Properties. Move to the Shortcut tab. In the end of the T ...

  10. hdu 1215 筛法

    求小于n的n的因子之和 Sample Input 3 2 10 20Sample Output 1 8 22 #include<cstdio> #include<iostream&g ...