【20160924】GOCVHelper 圖像處理部分(1)


     增強后的圖像需要通過圖像處理獲得定量的值。在實際程序設計過程中,輪廓很多時候都是重要的分析變量。參考Halcon的相關函數,我增強了Opencv在這塊的相關功能。

      //尋找最大的輪廓
    VP FindBigestContour(Mat src){    
        int imax = 0; //代表最大輪廓的序號
        int imaxcontour = -1; //代表最大輪廓的大小
        std::vector<std::vector<cv::Point>>contours;    
        findContours(src,contours,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
        for (int i=0;i<contours.size();i++){
            int itmp =  contourArea(contours[i]);//這里采用的是輪廓大小
            if (imaxcontour < itmp ){
                imax = i;
                imaxcontour = itmp;
            }
        }
        return contours[imax];

    }
就是直接返回最大的輪廓。

 
    //尋找並繪制出彩色聯通區域
    vector<VPconnection2(Mat src,Matdraw){    
        draw = Mat::zeros(src.rows,src.cols,CV_8UC3);
        vector<VP>contours;    
        findContours(src.clone(),contours,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
        //由於給大的區域着色會覆蓋小的區域,所以首先進行排序操作
        //冒泡排序,由小到大排序
        VP vptmp;
        for(int i=1;i<contours.size();i++){
            for(int j=contours.size()-1;j>=i;j--){
                if(contours[j].size()<contours[j-1].size()){    
                    vptmp = contours[j-1];
                    contours[j-1] = contours[j];
                    contours[j] = vptmp;
                }
            }
        }
        //打印結果
        for (int i=contours.size()-1;i>=0;i--){
            Scalar  color  = Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));
            drawContours(draw,contours,i,color,-1);
        }
        return contours;
    }
    vector<VPconnection2(Mat src){
        Mat draw;
        return connection2(src,draw);
    }
尋找聯通區域是經典的圖像處理過程。我采用輪廓分析方法進行解決;並且最后對不能區域繪制不同顏色,非常直觀。
 






免責聲明!

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



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