您的位置:首页 > 运维架构

OpenCV对csv文件的读写操作

2016-03-22 10:08 761 查看
在用opencv进行图片操作时,经常涉及到对矩阵的操作。由于本人常需要把矩阵进行本地保存和读取,如果直接用文件操作会比较麻烦,本文总结了以下对csv文件进行读写的操作。

1.读取CVS文件

opencv中的CvMLData可以实现对csv文件的读取,注意CvMLData包含在ml.h头文件中,所以需要添加#include “ml.h”采用使用。 CvMLData类的官方API介绍如下链接

http://docs.opencv.org/2.4/modules/ml/doc/mldata.html?highlight=cvmldata#cvmldata-read-csv

使用示例:

CvMLData mlData;
mlData.read_csv("test.csv");//读取csv文件
cv::Mat data= cv::Mat(mlData.get_values(),true);


通过以上三行代码就可以把cvs文件中的矩阵读取到data矩阵中。注意,最后一行代码用cv::Mat()就行转换是因为CvMLData::get_values()返回的是CvMat类型的矩阵。

2.保存cv::Mat矩阵为csv文件

opencv可以通过CvMLData来读取csv文件,但是遗憾的是opencv不能直接把Mat矩阵存储为csv文件。鉴于此本人自己写了一个保存Mat矩阵为csv文件的函数。代码如下

void saveMat(cv::Mat inputMat,char* filename)
{
FILE* fpt = fopen(filename,"w");
int rows = inputMat.rows;
int clos = inputMat.cols;
for (int i = 0; i < rows;i++)
{
for(int j = 0;j<clos;j++)
{
if (j < clos-1)
fprintf(fpt,"%f,",inputMat.at<float>(i,j));
else
fprintf(fpt,"%f\n",inputMat.at<float>(i,j));
}
}
fclose(fpt);

}


该函数有两个参数,一个是将保存的Mat矩阵,一个是保存的文件名。如要保存上面的data矩阵为data.csv文件,则可以使用saveMat(data,”data.csv”)。

通过以上两种方式就可以轻松对opencv中的Mat矩阵进行读取和保存了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: