opencv读取数据

来源:互联网 发布:英雄皮肤淘宝店 编辑:程序博客网 时间:2024/06/07 09:01

将matlab的矩阵保存为TXT,并用opencv读取,然后保存为Mat类型

做图像分类,matlab提取的特征用于训练和测试神经网络,想要用opencv打开,想了非常久,自己都没有做出来,刚开始想用xml 文档作为介质进行传输,发现比较困难,网上的方法试了试没有成功,请来了一个大神师兄,不得不佩服,几分钟用txt给我搞定了。以前,我总是想把mat保存为图片,这样不管是matlab还是opencv,均可以方便的进行数据传递,这个想法是可以的,但是只能针对整形数据,矩阵中如果出现了小数或者负数,那么在保存为图片时候像素值将会自动映射为整数,再次读取元素值也就发生了变化。因此保存为xml或者txt,才是正确的方法,首先将matlab矩阵保存为txt(比较简单,保存xml貌似非常麻烦),代码如下:
  • 1
  • 2
  • 3
save 矩阵名字.txt 要保存的矩阵 -ASCII
  • 1
上述代码即可将矩阵保存为TXT文档,注意后面的 -ascii不可以省略。下面是opencv读取并赋值给一个矩阵的代码:
  • 1
  • 2
  • 3
    #include<opencv2\opencv.hpp>    #include<cv.h>    #include<fstream>    #include<iostream>    using namespace cv;    using namespace std;    int main()    {        //加载TXT文档,并转换为mat类,作为训练样本。        fstream file;//创建文件流对象        file.open("C:\\Users\\andy\\Documents\\MATLAB\\DataSet.txt");//以读写方式打开文档        Mat TrainData=Mat::zeros(70,213,CV_32FC1);//创建mat类矩阵TrainData,定义初值全部为0,矩阵大小和txt中保持一样。        //将TXT文档数据写到TrainData        for (int i = 0; i < 70; i++)        {            for (int j = 0; j < 213; j++)            {                file>>TrainData.at<float>(i,j);//将txt中数值写入到opencv矩阵中            }        }        cout<<TrainData<<endl;        waitKey(0);    }
原创粉丝点击