笔记分享--matlab和c++工程之间的数据交换

这篇工作笔记探讨了在图像处理项目中,如何在MATLAB和C++之间进行数据交换,涉及到C++库如OpenCV和OpenGL的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

据我的工程经验,做图像处理过程中经常用到matlab和c++(opencv, opengl etc).下面给大家分享一段我的工作笔记:


//Data interaction between C++ and matlab:
//1.read binary data file generated by cpp project via matlab:
main()
{
        fstream data_out;
data_out.open("data_cpp2mat.txt", ios::out | ios::binary);
int Arr[100];
for(int i=0; i<100; i++)
{
Arr = i;
}
writeArr<int>(Arr, 100, &data_out);
data_out.close();
}

template <class Type>
void writeArr(Type *Arr, const int ArrLen, fstream *data_out_file)
//Effect: write data "Arr" to file "data_out_file" in binary type so that can be readed via matlab
//Author: Su Dongcai at 2011/10/29
{
data_out_file->write(reinterpret_cast<char *>(Arr), ArrLen * sizeof(Type));
}

//The matlab m-file for reading:
function a = readCppData(fileName, size, precision)
%Effect: read matrix 'a' in file('fileName') which generated by cpp project
%Inputs:
%fileName: the absolute name of file where data stored
%size: the size of Array
%precision: the type of the Array
%Author: Su Dongcai at 2011/10/29
fid = fopen(fileName, 'r');
a = fread(fid, size, precision);

//2.read binary data file generated by matlab via cpp project:
//matlab writing function: 
function saveBinaryFile(fileName, Arr)
%Effect: save data(double) Arr into 'fileName' which is a binary type data file
fid = fopen(fileName, 'w');
Arr = [length(Arr), Arr];
fwrite(fid, Arr, 'double');

cpp reading function:
main()
{
        fstream data_in;
data_in.open("matlab2cpp.txt", ios::in | ios::binary);
double *pArr;
int ArrLen;
readArr<double>(&data_in, &pArr, &ArrLen);
for(int i=0; i<100; i++)
{
cout<<pArr<<", ";
}
data_in.close();
delete [] pArr;
return 0;
}
template <class Type>
void readArr(fstream *data_in_file, Type **ppArr, int *pArrlen)
//Effect: read objective array 'Arr' from 'data_in_file' which generated by matlab project
//the data structure of 'data_in_file': [ArrLen, {elements of Arr}]
//Author: Su Dongcai at 2011/10/29
{
Type Arrlen;
data_in_file->read(reinterpret_cast<char *>(&Arrlen), sizeof(Type));
int nElements = (int)Arrlen+1;
(*pArrlen) = nElements;
(*ppArr) = new Type[nElements];
data_in_file->read(reinterpret_cast<char *>(*ppArr), nElements*sizeof(Type));

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值