设为首页 加入收藏

TOP

12.4.3 图像识别(3)
2013-10-07 15:13:36 来源: 作者: 【 】 浏览:64
Tags:12.4.3 图像 识别

12.4.3  图像识别(3)

运行程序,实现后的效果如图12.15和图12.16所示。

 
图12.15  图像膨胀处理后效果
 
图12.16  图像填充处理后效果

(8)经过膨胀和填充处理后图像中依然存在不完整的图像元素,需要删去图像边缘不完整的图形。通过移除与边界相连通的目标,在MATLAB命令窗口中输入如下代码:

  1. >> BW4=imclearborder(BW3,4);  
  2. >>figure,imshow(BW4); 

运行程序,得到如图12.17所示结果。
 
图12.17  图像最终分割效果图
(9)最后通过统计计算函数,计算图像中药丸数目。在MATLAB命令窗口输入如下代码:
  1. >> [labeled numpills]=bwlabel(BW4,4);  
  2. >> numpills  
  3. numpills =  
  4.     10 

可见计算结果与实际图像中的结果相符,从而实现了通过图像识别进行药丸计数的功能。

2.使用Visual C++(www.cppentry.com)设计界面并调用MATLAB引擎

使用Visual C++(www.cppentry.com)设计的界面如图12.18所示,包括图像预处理、图像处理和识别、计数结果查看等功能。其中,图像预处理包括打开原始图像、处理成灰度图像、中值滤波处理等功能,图像处理和识别包括图像分割处理、图像边缘检测、图像膨胀填充处理和删除不清晰边缘等功能。按照功能设定相应的按钮,添加一个编辑框控件显示计数结果值,用显示图像的Picture控件来显示要识别的原始图像。

 
(点击查看大图)图12.18  设计的用户界面
为了在界面的Picture控件上显示原始图像,需要在对话框类的OnPaint()函数中添加以下代码:
  1. void CTestMatlabEngineDlg::OnPaint()   
  2. {  
  3.       CBitmap bmp;  
  4.       HBITMAP hbmp;  
  5.       CString strpicname;     
  6.     //将pStatic指向要显示图片的地方  
  7.       CStatic *pPicture;  
  8.       pPicture=(CStatic*)GetDlgItem(IDC_PICTURE);//IDC_PHOTO为picture控件ID  
  9.       strpicname="D:\\VCMatlabTest\\PillCaculation\\pill.bmp";  
  10.     //加载资源    hbmp=(HBITMAP)::LoadImage(NULL,
    strpicname,IMAGE_BITMAP, 0,0,LR_LOADFROMFILE|LR_
    CREATEDIBSECTION);//strpicname为图片的名字  
  11.       bmp.Attach(hbmp);//获得加载图片的句柄  
  12.     //获取图片格式  
  13.       BITMAP bmInfo;  
  14.       bmp.GetBitmap(&bmInfo);  
  15.     //创建设备内存  
  16.       CDC dcMem;  
  17.       dcMem.CreateCompatibleDC(GetDC());  
  18.       CBitmap *pOldmap=(CBitmap*)dcMem.SelectObject(bmp);  
  19.     //获得矩形区域    
  20.       CRect lRect;  
  21.       pPicture->GetClientRect(&lRect);  
  22.     // ScreenToClient(&lRect);  
  23.     //显示位图  
  24.     pPicture->GetDC()->StretchBlt(lRect.left,lRect.top,
    lRect.Width(),lRect. Height(),&dcMem,0,0,bmInfo.bmWidth,bmInfo.bmHeight,SRCCOPY);  
  25.       dcMem.SelectObject(&pOldmap);  
  26.         if (IsIconic())  
  27.     {  
  28.         CPaintDC dc(this); // device context for painting  
  29.         SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);  
  30.         // Center icon in client rectangle  
  31.         int cxIcon = GetSystemMetrics(SM_CXICON);  
  32.         int cyIcon = GetSystemMetrics(SM_CYICON);  
  33.         CRect rect;  
  34.         GetClientRect(&rect);  
  35.         int x = (rect.Width() - cxIcon + 1) / 2;  
  36.         int y = (rect.Height() - cyIcon + 1) / 2;  
  37.         // Draw the icon  
  38.         dc.DrawIcon(x, y, m_hIcon);  
  39.     }  
  40.     else  
  41.     {  
  42.         CDialog::OnPaint();  
  43.     }  
  44. }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇12.2.3 图像识别原理 下一篇12.4.3 图像识别(2)

评论

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