使用的别人的源码,别人的可以运行,但是我再工程里面就不行,老是在memcpy里面出现Unhandled exception at 0x10233803 (msvcr80d.dll) in MSLDMatching.exe: 0xC0000005: Access violation writing location 0x000001e0.的错误,我把那几行代码放到新的工程中,完全可以给mxGetPr(input)指针赋值,但是在以下程序中无法给mxGetPr赋值,不知道为什么??
特此请教
void MatlabCanny(IplImage*& pGrayImage,IplImage*& pEdgeImage)
{
int Pwidth=pGrayImage->width;
int Pheight=pGrayImage->height; mclInitializeApplication(NULL,0); mxArray * input=NULL;
mxArray * output=NULL; input=mxCreateNumericMatrix(Pheight,Pwidth,mxUINT8_CLASS,mxREAL);
output=mxCreateNumericMatrix(Pheight,Pwidth,mxUINT8_CLASS,mxREAL); memcpy((BYTE *)mxGetPr(input),(BYTE *)pGrayImage->imageData,Pheight*Pwidth*sizeof(BYTE)); 在次出现错误 Engine *ep;
ep=engOpen(NULL); engPutVariable(ep,"input",input);
engEvalString(ep,"output=edge(im2uint8(input),'canny');output=im2uint8(output);");
output=engGetVariable(ep,"output"); memcpy(pEdgeImage->imageData,mxGetPr(output),Pheight*Pwidth*sizeof(BYTE)); mxDestroyArray(input); input=0;
mxDestroyArray(output); output=0; mclTerminateApplication();
engClose(ep);
}
特此请教
void MatlabCanny(IplImage*& pGrayImage,IplImage*& pEdgeImage)
{
int Pwidth=pGrayImage->width;
int Pheight=pGrayImage->height; mclInitializeApplication(NULL,0); mxArray * input=NULL;
mxArray * output=NULL; input=mxCreateNumericMatrix(Pheight,Pwidth,mxUINT8_CLASS,mxREAL);
output=mxCreateNumericMatrix(Pheight,Pwidth,mxUINT8_CLASS,mxREAL); memcpy((BYTE *)mxGetPr(input),(BYTE *)pGrayImage->imageData,Pheight*Pwidth*sizeof(BYTE)); 在次出现错误 Engine *ep;
ep=engOpen(NULL); engPutVariable(ep,"input",input);
engEvalString(ep,"output=edge(im2uint8(input),'canny');output=im2uint8(output);");
output=engGetVariable(ep,"output"); memcpy(pEdgeImage->imageData,mxGetPr(output),Pheight*Pwidth*sizeof(BYTE)); mxDestroyArray(input); input=0;
mxDestroyArray(output); output=0; mclTerminateApplication();
engClose(ep);
}
=====================================
你的问题专业性太强了,我平时也用matlab 但是大部分时间都是分析数据的规律进行数据建模
楼主是否可以换一下思路,用程序去实现matlab的相应功能呢