輪廓屬性
二值圖像分析最常見的一個主要方式就是輪廓發(fā)現(xiàn)與輪廓分析,其中輪廓發(fā)現(xiàn)的目的是為輪廓分析做準備,經(jīng)過輪廓分析我們可以得到輪廓各種有用的屬性信息、常見的如下:
輪廓面積
輪廓周長
輪廓幾何矩
輪廓的最小外接矩形
輪廓的最大外接矩形
輪廓的最小外接圓
輪廓的最小外接三角形
輪廓擬合(支持擬合直線、橢圓、圓)
輪廓的凸包
輪廓層次信息提取
多邊形逼近
計算歐拉數(shù)
函數(shù)介紹
OpenCV中提供大量輪廓分析函數(shù),通過這些函數(shù)我們可以方便快捷的得到輪廓的各種有用屬性信息、高效完成各種二值圖像分析需求,下面是我總結(jié)的一些常用的函數(shù)列表與說明。
OpenCV中輪廓發(fā)現(xiàn)函數(shù)如下:
voidcv::findContours( InputArrayimage, OutputArrayOfArrayscontours, OutputArrayhierarchy, intmode, intmethod, Pointoffset=Point() )
參數(shù)解釋如下:
image: 輸入圖像、八位單通道的,背景為黑色
contours: 得到的輪廓圖像
hierarchy: 層次圖像,根據(jù)需要提取輪廓層次信息
mode: 決定提取到層次信息內(nèi)容,是多層還是單層
method: 每個輪廓的編碼信息
offset: 表示輪廓偏移,默認為0
輪廓分析相關(guān)的常用函數(shù)
//計算輪廓面積 doublecv::contourArea( InputArraycontour, booloriented=false ) //計算輪廓周長 doublecv::arcLength( InputArraycurve, boolclosed ) //計算幾何矩與中心距 Momentscv::moments( InputArrayarray, boolbinaryImage=false ) //計算最小外接矩形 RotatedRectcv::minAreaRect( InputArraypoints ) //計算最大外接矩形 Rectcv::boundingRect( InputArrayarray ) //計算最小外接圓/擬合圓 voidcv::minEnclosingCircle( InputArraypoints, Point2f¢er, float&radius ) //計算最小外接三角形/擬合三角形 doublecv::minEnclosingTriangle( InputArraypoints, OutputArraytriangle ) //擬合直線 voidcv::fitLine( InputArraypoints, OutputArrayline, intdistType, doubleparam, doublereps, doubleaeps ) //擬合橢圓 RotatedRectcv::fitEllipse( InputArraypoints ) //計算凸包 voidcv::convexHull( InputArraypoints, OutputArrayhull, boolclockwise=false, boolreturnPoints=true ) //多邊形逼近-逼近真實形狀 voidcv::approxPolyDP( InputArraycurve, OutputArrayapproxCurve, doubleepsilon, boolclosed )
靈活使用上述輪廓屬性信息,可以實現(xiàn)對二值圖像的幾何形狀判別、測量、面積過濾、獲取每個對象的幾何屬性包括面積、周長、編碼點、形狀、層次/位置信息、歐拉數(shù)、中心位置、傾斜角度。
綜合運用代碼演示
2020年 以前我分享過一些綜合使用的例子,列表如下(都看過你就贏了):
二值圖像分析案例精選
OpenCV二值圖像案例分析精選 | 第二期
OpenCV輪廓層次分析實現(xiàn)歐拉數(shù)計算
OpenCV尋找復(fù)雜背景下物體的輪廓
如何識別出輪廓準確的長和寬
OpenCV中幾何形狀識別與測量
OpenCV中BLOB特征提取與幾何形狀分類
OpenCV直線擬合檢測
OpenCV中實現(xiàn)曲線與圓擬合
這里再分享一個硬幣計數(shù)的例子!
原圖如下:
代碼如下:
//加載圖像 Matimg=imread("D:/CoinsB.png"); imshow("OriginalImage",img); //閾值化操作 Matgray,binary; cvtColor(img,gray,COLOR_BGR2GRAY); floatt=threshold(gray,binary,0,255,THRESH_BINARY|THRESH_OTSU); imshow("binary",binary); imwrite("D:/binary1.png",binary); //形態(tài)學操作 Matse=getStructuringElement(MORPH_RECT,Size(3,3)); morphologyEx(binary,binary,MORPH_OPEN,se,Point(-1,-1)); //輪廓發(fā)現(xiàn) vectorhireachy; vector >contours; bitwise_not(binary,binary); findContours(binary,contours,hireachy,RETR_EXTERNAL,CHAIN_APPROX_SIMPLE,Point()); Matresult=img.clone(); Point2fcenter; floatradius; //輪廓分析 for(size_tt=0;t
審核編輯:彭靜
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4368瀏覽量
64184 -
二值圖像
+關(guān)注
關(guān)注
0文章
14瀏覽量
8831 -
輪廓分析
+關(guān)注
關(guān)注
0文章
2瀏覽量
6137
原文標題:OpenCV | 二值圖像分析的技巧都在這里
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
變頻器最常見的十大故障現(xiàn)象和分析處理實例
基于邊界特征的圖像二值化方法應(yīng)用研究
基于圖像分塊的局部閾值二值化方法

評論