openCV找连通成分并计算相关轮廓特征

 

以下function用來取得一個影像的連通成分(connected component),將影像labeling以後,具有相同label的pixel即為同一個連通成分。透過對連通成分的分析,我們可以了解一張圖片的物件組成

此function輸入一張經過二值化(只有黑白)的影像,找到連通成分以後會用紅色矩形框起來。
areaThreshold用來篩選連通成分,如果連通成分的面積小於areaThreshold表示此連通成分是雜訊,可以忽略。
void GetLabeling(IplImage *pImg,int areaThreshold)
{

    CvMemStorage * storage = cvCreateMemStorage(0);
    CvSeq * contour = 0;

    cvFindContours( pImg, storage, &contour, sizeof(CvContour),
                    CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE , cvPoint(0,0));

    int i=0;
    for(;contour;contour = contour->h_next)
    {
        CvRect aRect = cvBoundingRect( contour, 0 );
        if((aRect.width*aRect.height)>areaThreshold)
        {
          cvRectangle( pImg, cvPoint(tmpRect.Left,tmpRect.Top),cvPoint((tmpRect.Right),
            (tmpRect.Bottom)),CV_RGB(255,0,0), 3 );
        }
    }
}

上面程式中的aRect 表示的就是一個連通成分的矩形邊界。

找到連通成分以後,可以參考 OpenCV中文網站的結構分析
這一頁說明了一些計算輪廓特徵的function,

像是 ContourArea用來計算輪廓面積,
ArcLength用來計算輪廓的周長,
CalcPGH用來計算輪廓的幾何直方圖。

透過對輪廓的分析,我們可以對影像的組成物件進行辨識,並進而 透過組成的物件來猜測這張影像的場景或人物
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值