设为首页 加入收藏

TOP

12.4.3 图像识别(4)
2013-10-07 15:13:42 来源: 作者: 【 】 浏览:74
Tags:12.4.3 图像 识别

12.4.3  图像识别(4)

实现图像处理、识别和药丸计数的程序代码如下:

  1.  Engine *ep;  
  2.  mxArray *count=NULL;               //定义mxArray类型变量指针  
  3.  double *Result;                    //定义double变量指针  
  4.  if(!(ep=engOpen(NULL)))  
  5.      ::MessageBox(NULL,"不能启动MATLAB engine"," Visual C++(www.cppentry.com)调用matlab engine示例程序",MB_OK);  
  6.  engeva lString(ep,"[FileName,PathName] = uigetfile('*.*','选择二值图像文件');");  
  7.  engeva lString(ep,"imfile = strcat(PathName,FileName);");  
  8.  engeva lString(ep,"I=imread(imfile);");  
  9.  engeva lString(ep,"i=rgb2gray(I);");  
  10.  engeva lString(ep,"F0=imadjust(i,stretchlim(i),[0 1]);");  
  11.  engeva lString(ep,"Ft=medfilt2(F0,[5 5]);");  
  12.  engeva lString(ep,"level=graythresh(Ft);");  
  13.  engeva lString(ep,"BW=im2bw(Ft,level);");  
  14.  engeva lString(ep,"BW1=edge(BW,'sobel',0.3);");  
  15.  engeva lString(ep,"se90=strel('line',7,90);");  
  16.  engeva lString(ep,"se0=strel('line',7,0);");  
  17.  engeva lString(ep,"BW2=imdilate(BW1,[se90,se0]);");  
  18.  engeva lString(ep,"BW3=imfill(BW2,'holes');");  
  19.  engeva lString(ep,"BW4=imclearborder(BW3,4);");  
  20.  engeva lString(ep,"[labeled numpills]=bwlabel(BW4,4);");  
  21. count = engGetVariable(ep,"numpills");  
  22. Result = mxGetPr(count);  
  23.  CString   Result_str;  
  24.  int m_intResult;  
  25.  m_intResult = (int)(Result[0]+0.5);        //double转换为整型  
  26.  Result_str.Format( "%d ",m_intResult);     //整型转换为CString型  
  27.  SetDlgItemText(IDC_EDIT1,Result_str);      //计数结果写到Edit控件上面  
  28.  ::MessageBox(NULL,"按下任意键继续"," Visual C++(www.cppentry.com)调用matlab引擎",MB_OK);  
  29.  engClose(ep);  

程序编译运行后的主界面如图12.19所示。单击"计数结果"按钮,将在Edit控件上显示计数结果为10,和直接使用MATLAB进行统计的数据结果相符合。
 
图12.19  程序主界面
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇12.2.2 图像识别的基础 下一篇12.4 图像识别的应用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: