輪廓屬性
二值圖像分析最常見的一個主要方式就是輪廓發現與輪廓分析,其中輪廓發現的目的是為輪廓分析做準備,經過輪廓分析我們可以得到輪廓各種有用的屬性信息、常見的如下:
輪廓面積
輪廓周長
輪廓幾何矩
輪廓的最小外接矩形
輪廓的最大外接矩形
輪廓的最小外接圓
輪廓的最小外接三角形
輪廓擬合(支持擬合直線、橢圓、圓)
輪廓的凸包
輪廓層次信息提取
多邊形逼近
計算歐拉數
函數介紹
OpenCV中提供大量輪廓分析函數,通過這些函數我們可以方便快捷的得到輪廓的各種有用屬性信息、高效完成各種二值圖像分析需求,下面是我總結的一些常用的函數列表與說明。
OpenCV中輪廓發現函數如下:
voidcv::findContours( InputArrayimage, OutputArrayOfArrayscontours, OutputArrayhierarchy, intmode, intmethod, Pointoffset=Point() )
參數解釋如下:
image: 輸入圖像、八位單通道的,背景為黑色
contours: 得到的輪廓圖像
hierarchy: 層次圖像,根據需要提取輪廓層次信息
mode: 決定提取到層次信息內容,是多層還是單層
method: 每個輪廓的編碼信息
offset: 表示輪廓偏移,默認為0
輪廓分析相關的常用函數
//計算輪廓面積 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 )
靈活使用上述輪廓屬性信息,可以實現對二值圖像的幾何形狀判別、測量、面積過濾、獲取每個對象的幾何屬性包括面積、周長、編碼點、形狀、層次/位置信息、歐拉數、中心位置、傾斜角度。
綜合運用代碼演示
2020年 以前我分享過一些綜合使用的例子,列表如下(都看過你就贏了):
二值圖像分析案例精選
OpenCV二值圖像案例分析精選 | 第二期
OpenCV輪廓層次分析實現歐拉數計算
OpenCV尋找復雜背景下物體的輪廓
如何識別出輪廓準確的長和寬
OpenCV中幾何形狀識別與測量
OpenCV中BLOB特征提取與幾何形狀分類
OpenCV直線擬合檢測
OpenCV中實現曲線與圓擬合
這里再分享一個硬幣計數的例子!
原圖如下:
代碼如下:
//加載圖像 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); //形態學操作 Matse=getStructuringElement(MORPH_RECT,Size(3,3)); morphologyEx(binary,binary,MORPH_OPEN,se,Point(-1,-1)); //輪廓發現 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
審核編輯:彭靜
-
函數
+關注
關注
3文章
4327瀏覽量
62573 -
二值圖像
+關注
關注
0文章
14瀏覽量
8730 -
輪廓分析
+關注
關注
0文章
2瀏覽量
6096
原文標題:OpenCV | 二值圖像分析的技巧都在這里
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論