C中运行matlab

brufeng 2013-07-04 04:25:16
C中已经配置好了matlab,然后程序编译链接通过,但是运行时会出错,经过查找发现是mxSetData这句的问题,该程序就是将c中一个int型的数据赋值到了matlab中,后面把固定文件名的jpg格式图片转换成灰度图片,但是不知道怎么才能解决,请高手指点~~

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/*matlab调用部分*/
#include <engine.h>
#include <matrix.h>
#include <mat.h>
#pragma comment(lib,"libeng.lib")
#pragma comment(lib,"libmx.lib")
#pragma comment(lib,"libmat.lib")
void main()
{
Engine *ep = engOpen (NULL); //启用matlab引擎
engSetVisible(ep,0);//关闭matlab调用窗口
engEvalString(ep,"cd work");//调整工作空间到work
int i=0;
mxArray *pi=mxCreateNumericMatrix(1,1,mxINT32_CLASS,mxREAL);
mxSetData(pi,&i);
printf("run here!");
/*调用matlab处理彩色图像为灰度图像,保存灰度图像并保存为二维数组*/
int times=100; //处理图片帧数

engEvalString(ep,"name='动态图像分析'");
for(i=0;i<times;i++)
{
if(i<10)
{
engPutVariable(ep,"i",pi);
engEvalString(ep,"baseName=strcat(name,'000',num2str(i));");
}
else if(i<100)
{
engPutVariable(ep,"i",pi);
engEvalString(ep,"baseName=strcat(name,'00',num2str(i));");
}
else if(i<1000)
{
engPutVariable(ep,"i",pi);
engEvalString(ep,"baseName=strcat(name,'0',num2str(i));");
}
else
{
engPutVariable(ep,"i",pi);
engEvalString(ep,"baseName=strcat(name,num2str(i));");
}
engEvalString(ep,"imageName=strcat(baseName,'.jpg');");
engEvalString(ep,"I= imread(imageName);");
engEvalString(ep,"J=rgb2gray(I);");
engEvalString(ep,"fname=strcat(baseName,'.bmp');");
engEvalString(ep,"imwrite(J,fname);");
}
engClose(ep);//释放matlab引擎
}

下面是调试运行到mxArray和mxSetData这两步的情况:
i 0
mxINT32_CLASS 12
mxREAL 0
pi 0xcccccccc
---------------------------------
- &i 0x0012ff40
0
mxINT32_CLASS 12
mxREAL 0
pi 0x017a4b18
---------------------------------
可以看到pi指向的地址和&i的地址并不相同,这个正常吗?在下新手,求高手指点。
...全文
166 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧