中易网

C++调用matlab时 数组转换成矩阵怎么处理

答案:1  悬赏:0  
解决时间 2021-01-11 01:33
C++调用matlab时 数组转换成矩阵怎么处理
最佳答案
c++的数据是先行再列 但是matlab是先列再行
const mwSize dims[3]={IMAGE_HEIGHT,IMAGE_WIDTH,3};
mxArray *A=mxCreateNumericArray(3,dims,mxUINT8_CLASS,mxREAL);
unsigned char* pchar=(unsigned char*)mxGetData(A);
for(int i=0;imxArray *C=mxCreateNumericArray(3,dims,mxUINT8_CLASS,mxREAL);
mlfFaceMatch(1,&C,A); //调用m文件函数
memcpy(lpdata,mxGetPr(C),3*IMAGE_WIDTH*IMAGE_HEIGHT*sizeof(unsigned char));
lpdata是内存中的视频帧数据 IMAGE_HEIGHT和IMAGE_WIDTH是图像高度和宽度
------解决方案--------------------------------------------------------
我的第一个方法是把MATLAB实现的功能做成DLL,然后会形成类似
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] );
的函数,然后在VC中就只管发送和接收数据,当然这个方法麻烦就麻烦在还是需要转换数据;
第二个方法就是把MATLAB直接编译成exe,让它可以独立处理数据,然后在vc中做一个调用,直接调用那个exe程序,当matlab的程序在运行时,我的vc就等待结果,一般是等待生成的文件,当文件生成好后,就读取进来,再处理文件;
我看了你的代码,发现你从c++传值到matlab有问题,根据我看到的理解,你应该是把一张24位位深的图片分为RGB的3维矩阵来存储,那么你在从c++赋值到matlab时,最好使用
for(int k = 0; k < 3; k++)
for(int j = 0; j < nHeight; j++)
for(int i = 0; i < nWidth; i++){pchar[j * nWidth + i + (nHeight * nWidth) * k] = lpdata + j * nStep + i * 3 + k;}(假设lpdata是指向24位位图数据的指针,nStep是步长)
的形式赋值,这样可以保证赋值不会错,rgb值不会打绞。
其次,你在把数据从matlab中读回后,也应该按照上面的方法反过来赋值。你先试试吧,这个vc、matlab混合编程我有大半年没弄了,也忘的差不多了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
电信翼支付的商户联名券(新用户满10减10)用
面对别人对你嫉妒对你背后搞你,怎么办啊
淡水螃蟹怎么煮好吃呀?
三星500R5K怎样进入我自制的系统U盘,换系统
关于CUBASE5 声卡设置的问题
华硕n系列所有笔记本有哪些
(我爱你21克)是什么意思?
部门聚会,大约25个人,适合玩什么游戏?
iPad和iPhone充电器的充电器是否通用
从增光路到北京欢乐谷的最佳乘车路线?
有没有美妈入了破壁机
雷神的锤子是姐姐的吗
为什么有些人的女神愿意跟些小混混上床也不
长发女生流行什么发型 一大波漂亮发型值得参
如何全面识别股票k线图各种形态
推荐资讯
事与人前是什么意思
国家公务员考试总成绩是怎么计算的??
初中周记(600字左右)
PhotoShop粗糙墙面效果怎么做,如下图
如何写好阅读题
除了B站之外,哪些视频网站也很好
“有生何处不安生”出自哪一首诗词
湖北汉武律师事务所在哪里啊,我有事要去这个
骨化是什么意思?
求像阡陌一样 在文言文里有一定意思且现在听
鱼胶适合男人吃吗?
香榭丽人薰衣草地址在哪,我要去那里办事
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?