iplimage-vs与MATLAB混合编程实现图像处理

问题描述

vs与MATLAB混合编程实现图像处理

我想要vs与MATLAB混合编程实现图像处理的可视化界面,调用的shiyan1的程序后为什么不会显示图像呢?我不知道到底是哪里出问题了,运行程序不显示哪里有错误就是不会显示图像,望大家帮帮我,谢谢了。下面是我的程序:
void CMFCApplication17Dlg::OnClickedButton1()
{
if( !lvboInitialize())

{

printf("Could not initialize !");

return ;

}
IplImage image=NULL;
if(image)
cvReleaseImage(&image);
image = cvLoadImage("H:lena.bmp",1);
if (image==0)
MessageBox("Reading Failed");
mwArray mwdisp(image->height*image->width,mxUINT8_CLASS);
IplImage
pTemp = cvCreateImage(cvSize(image->height, image->width), IPL_DEPTH_8U, 1); //n*m创建图像
cvTranspose(image, pTemp);//m*n->n*m,复制image中的数据到ptemp中
CvMat* pMat = cvCreateMat(image->height, image->width, CV_8UC1);//pmat:n*m分配矩阵空间

   cvConvert(pTemp, pMat);//pmat:n*m,将图像转化为矩阵,任意类型数据的矩阵

    mwdisp.SetData(pMat->data.ptr, pMat->height*pMat->width);

mwArray ImageData(image->height,image->width ,mxDOUBLE_CLASS);
cvReleaseImage( &pTemp );

shiyan1(1,ImageData,mwdisp);

IplImage* pTempL0 = cvCreateImage(cvSize(image->height, image->width), IPL_DEPTH_64F, 1); //n*m
CvMat* pMatL0 = cvCreateMat(pTempL0->height, pTempL0->width, CV_64FC1);//n*m

    ImageData.GetData(pMatL0->data.db,pMatL0->height*pMatL0->width);
    cvConvert(pMatL0,pTempL0);//mat->iplimage
    IplImage* pL0SmoothImg =cvCreateImage(CvSize(cvGetSize(image)),IPL_DEPTH_64F,1);//m*n
    cvCopy(pTempL0, pL0SmoothImg); //n*m->m*n
    IplImage* result =cvCreateImage(CvSize(cvGetSize(image)),IPL_DEPTH_8U,1);
      double minVal;

double maxVal;
cvMinMaxLoc(pL0SmoothImg, &minVal, &maxVal);
printf("%f ",minVal);
printf("%f",maxVal);
// Normalize image (0 - 255) to be observed as an u8 image
double scale = 255/(maxVal - minVal);
double shift = -minVal * scale;
cvConvertScale(pL0SmoothImg,result,scale,shift);//
cvNamedWindow("去噪后图像",CV_WINDOW_AUTOSIZE);
cvShowImage("去噪后图像",image);
cvWaitKey(0);
DrawPicToHDC(image, IDC_showimage2);

cvReleaseImage( &pTempL0 );
cvReleaseImage( &pL0SmoothImg);
cvReleaseImage( &result );
lvboTerminate();
}

解决方案

看下matlab的虚拟机环境有没有部署正确

解决方案二:

你这个是opencv里面用了matlab生成的dll窗口?
你看看这个有用没?
http://blog.csdn.net/wangyaninglm/article/details/39188535

解决方案三:

void Cmdi_matlab_movewindow20140810View::OnMatlab()
{
    // TODO: 在此添加命令处理程序代码
//  CProcessCtrl m_process;
//
//  m_process.DoModal();
    CProcessCtrl *m_process = new CProcessCtrl();
    m_process->Create(IDD_PROCESS,this);
    m_process->ShowWindow(SW_SHOW);
    m_process->m_processctrl.SetPos(10) ;

    if( !myfunInitialize())
    {
        MessageBox(_T("初始化失败"));
    }

    m_process->m_processctrl.SetPos(30) ;
    fun();

    // terminate MCR
    mclTerminateApplication();
    CString wnd_name = "Topo Image";

    m_process->m_processctrl.SetPos(40) ;

    HWND hFig=::FindWindow(NULL,wnd_name);//wnd_name为matlab figure的名称,
    //此处需循环多次才能得到句柄,不知为啥
    while(hFig==NULL)
    {
        hFig=::FindWindow(NULL,wnd_name);

    }
    m_process->m_processctrl.SetPos(60) ;
    //::ShowWindow(hFig, SW_HIDE);
    ModifyStyle(hFig,WS_POPUP,WS_CHILD,NULL); 

    long IStyle=::GetWindowLong(hFig,GWL_STYLE); //获得figure的属性

    //ModifyStyle(hFig,WS_POPUP,WS_CHILD,NULL); 

    //CWnd* pMainWnd =AfxGetMainWnd();
    //CRect client_rect;
    CRect figure_rect;
    CWnd *myfigure = GetDlgItem(IDC_STATIC_MATLABWND);

    myfigure->GetClientRect(&figure_rect);
    //pMainWnd->GetClientRect(&client_rect);

    long fig_width=figure_rect.Width();
    long fig_height=figure_rect.Height();

    m_process->m_processctrl.SetPos(80) ;

    ::SetParent(hFig,myfigure->GetSafeHwnd());//设置figure的父窗口
    ::SetWindowLong(hFig,GWL_STYLE,IStyle & (~WS_CAPTION) & (~WS_THICKFRAME));//设置figure的属性,去掉标题栏

    ::SetWindowPos(hFig,NULL,0,0,fig_width,fig_height,SWP_NOZORDER|SWP_NOACTIVATE);//

    m_process->UpdateData(false);
    m_process->DestroyWindow();

    ::ShowWindow(hFig,SW_SHOW);  //显示设置完后的figure
    ::SetForegroundWindow(this->m_hWnd);

    //::UpdateWindow(hFig); //刷新
    //::UpdateWindow(myfigure->m_hWnd); //刷新

}

时间: 2024-09-07 13:26:43

iplimage-vs与MATLAB混合编程实现图像处理的相关文章

VS与MATLAB混合编程在mfc中用opencv显示图像

问题描述 VS与MATLAB混合编程在mfc中用opencv显示图像 我想用vs与MATLAB混合编程实现图像可视化界面,编译好的MATLAB程序是shiyan,编译成功后要在vs中mfc用opencv显示图像,但是最终处理后的图像显示不出来,想请大家帮忙看下我的程序哪里出问题了?先谢谢大家了,还有我想问问,我输入的是灰度图也就是在cmat中是1通道,是不是应该跟MATLAB显示出来的数是一样的?怎么把图像矩阵再vs中显示出来呢?谢谢大家,谁知道希望帮帮我! if( !lvboInitializ

调用-c#和matlab混合编程时遇到了一点问题,求帮助

问题描述 c#和matlab混合编程时遇到了一点问题,求帮助 是这样的,正在做一个数字图像处理的项目,在matlab里实现了一个去雾算法,然后想用c#调用它,把这个算法编译成了一个dll加到工程里,现在发现程序一打开,就没有什么反应,一开始以为是调用matlab的DLL会慢一些,没想到等了半天还是没动静,因为是第一次接触matlab和.net的混合编程,所以也不知道问题出在什么地方,求大虾解救. 解决方案 最直接的办法就是把matlab代码转成 C#的,即有了代码,有学到了理论! 解决方案二:

mfc-MFC与MATLAB混合编程生成可执行文件的移植性

问题描述 MFC与MATLAB混合编程生成可执行文件的移植性 我在matlab中建立一个函数并编译成dll,然后VS2008中的MFC调用dll,在我的电脑上成功运行,并生成可执行文件,也能成功运行.但是在别的电脑上就出现错误,错误原因是在我的电脑上DLL可以初始化,在别的电脑上初始化失败.求大神给看看!!!! 小弟没有C币,要不然一定悬赏100C币! 解决方案 需要带上Mfc库,Matlab库文件 解决方案二: 需要安装MCRInstaller 解决方案三: 参考下哦http://blog.c

matlab-vs 2010 跟MATLAB混合编程老报错

问题描述 vs 2010 跟MATLAB混合编程老报错 执行到MATLAB函数时软件会报错:Precision Design.exe 中的 0x758f812f 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0e79f60c 处的 mwException. 并且在MATLAB函数处中断 我用的方法是dll文件混合编程的,然后我单步执行时会出现这样的情况:无可用源 解决方案 参考:http://blog.csdn.net/wangyaninglm/article/deta

C#与matlab混合编程并实现实时交互的困惑

问题描述 C#与matlab混合编程并实现实时交互的困惑 最近在开发一个石油(测井)方面的软件,需要绘制常规的九条曲线,考虑到matlab的强大绘图功能,像3D绘图等,因此想在C#中通过调用matlab来绘图,但由于缺乏这方面的编程经验,所以没法下手(我还在校学习),在网上查了相关的资料,但始终没能调试成功,在这里希望大家能帮助我,如果有相关的资料或者代码,希望大家能够传给我一份,谢谢,还有一个问题就是调用完成绘图完成后最好能够进行实时交互,像matlab中绘图能够360度旋转观看之类的--谢谢

vb.net与matlab混合编程的问题

问题描述 vb.net与matlab混合编程,我用matlab编了一个简单的函数,两个输入一个输出,通过deploytool编译成dll文件,但是不知道使用vb.net怎么调用,我以前没用过动态链接库,网上查了好久,也没解决,希望高手指点一下.谢谢! 解决方案 解决方案二:先添加引用进来dll到项目中,然后在窗体里面调用Importsxxx解决方案三:引用1楼Json2008的回复: 先添加引用进来dll到项目中,然后在窗体里面调用Importsxxx 具体怎么调用啊,以前没用过动态链接库解决方

c++-求助:关于C++和matlab混合编程的问题

问题描述 求助:关于C++和matlab混合编程的问题 我最近在做一个东西就是从一个实物上接收到数据后在pc上显示出来 也就是要做一个可以显示数据的软件 我正在用C++做 可是有个问题就是我这个东西是要做成3d显示效果 而c++做三维图形不是很方便 所以我打算用matlab做三维显示 我感到困惑的就是当实物发送数据到软件的数据库中时可以再传输到matlab吗让matlab的显示跟着数据变化而变化?可以将matlab的图形通过软件显示出来吗? 希望各位大神指导下~谢谢啦 解决方案 你可以将Matl

vc与MATLAB混合编程不能一下输出3个参数结果

问题描述 vc与MATLAB混合编程不能一下输出3个参数结果 MATLAB程序是输出3个参数,但是总是输出第一个参数,然后再vc中调用的时候也是哪个参数在前面那个参数的结果会出来,但是其他两个的结果不会出来,这是为什么呢?还请各位知道的大神帮帮我,谢谢了!这是我的MATLAB程序,直接运行后只是出来第一个参数的值. function[b,e,h]=shiyan4(a) %a=imread('lena.bmp'); %figure;imshow(a); %title('原图像'); a=im2do

图片-java与matlab混合编程

问题描述 java与matlab混合编程 我在用java与matlab混合编程,想把手机里存储的图片用matlab来进行模糊处理下,这个图片的路径应该怎么写?图片是存在SD卡里的,谢谢,望高手指导 解决方案 JAVA调用MATLAB程序 解决方案二: matlab没法在手机中运行,你必须在计算机上调用,当你把手机连在计算机上的时候,手机sd卡如同一个移动磁盘,直接根据盘符路径访问就可以了.