opencv刪除二值圖中較小的噪點色塊


 CvSeq* contour = NULL;   
   double minarea = 100.0;   
   double tmparea = 0.0;   
CFileDialog dlg(true);   
if (dlg.DoModal()==IDOK)   
{   
    CvMemStorage* storage = cvCreateMemStorage(0);   
       
    IplImage* img_src= cvLoadImage(dlg.GetPathName(),CV_LOAD_IMAGE_ANYCOLOR);   
    IplImage* img_Clone=cvCloneImage(img_src);   
    //訪問二值圖像每個點的值   
    uchar *pp;   
    //顯示原始圖像   
    cvNamedWindow("img_src",CV_WINDOW_AUTOSIZE);   
    cvShowImage("img_src", img_src);   
       
    IplImage* img_dst = cvCreateImage(cvGetSize(img_src),IPL_DEPTH_8U,1);   
       
    //------------搜索二值圖中的輪廓,並從輪廓樹中刪除面積小於某個閾值minarea的輪廓-------------//   
    CvScalar color = cvScalar(255,0,0);//CV_RGB(128,0,0);   
    CvContourScanner scanner = NULL;   
scanner = cvStartFindContours(img_src,storage,sizeof(CvContour),CV_RETR_CCOMP,CV_CHAIN_APPROX_NONE,cvPoint(0,0));   
    //開始遍歷輪廓樹   
    CvRect rect;   
    while (contour=cvFindNextContour(scanner))   
    {   
        tmparea = fabs(cvContourArea(contour));   
            rect = cvBoundingRect(contour,0);      
        if (tmparea < minarea/*||tmparea>4900*/)   
        {   
           
        //當連通域的中心點為黑色時,而且面積較小則用白色進行填充   
            pp=(uchar*)(img_Clone->imageData + img_Clone->widthStep*(rect.y+rect.height/2)+rect.x+rect.width/2);   
            if (pp[0]==0)   
            {   
                for(int y = rect.y;y<rect.y+rect.height;y++)   
                {   
                    for(int x =rect.x;x<rect.x+rect.width;x++)   
                    {   
                        pp=(uchar*)(img_Clone->imageData + img_Clone->widthStep*y+x);   
                           
                        if (pp[0]==0)   
                        {   
                            pp[0]=255;   
                        }   
                    }   
                }   
            }   
           
        }   
    }   
cvSaveImage("c://temp//aav.bmp",img_Clone);  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM