在opencv中,能夠很方便的求輪廓包圍盒。包括矩形,圓形,橢圓形以及傾斜的矩形(包圍面積最小)集中包圍盒。用到的四個函式是:
rect boundingrect
(inputarraypoints)
void minenclosingcircle
(inputarraypoints, point2f¢er, float&radius)
rotatedrect minarearect
(inputarraypoints)
rotatedrect fitellipse
(inputarraypoints)
輸入的引數都是輪廓,下面是程式**:
1. rect和原型包圍盒**:
//轉化為灰度圖並進行blur操作
cvtcolor( src, src_gray, cv_bgr2gray );
blur( src_gray, src_gray, size(3,3) );
namedwindow( "source", cv_window_autosize );
imshow( "source", src );
mat threshold_output;
vector> contours;
vectorhierarchy;
//得到二值影象
threshold( src_gray, threshold_output, thresh, 255, thresh_binary );
//查詢輪廓
vector> contours_poly( contours.size() );
vectorboundrect( contours.size() );
vectorcenter( contours.size() );
vectorradius( contours.size() );
//得到每個輪廓的包圍盒rect以及園,園用中心和半徑表示
mat drawing = mat::zeros( threshold_output.size(), cv_8uc3 );
for( int i = 0; i< contours.size(); i++ )
namedwindow( "contours", cv_window_autosize );
imshow( "contours", drawing );
while(1)
waitkey(0);
return(0);}
程式執行效果:
2. 橢圓形和傾斜的矩形包圍盒**:
int main( int argc, char** argv )程式執行效果:}//畫輪廓和包圍盒
mat drawing = mat::zeros( threshold_output.size(), cv_8uc3 );
for( int i = 0; i< contours.size(); i++ )
namedwindow( "contours", cv_window_autosize );
imshow( "contours", drawing );
while(1)
waitkey(0);
return(0);
}
opencv 根據模板凸包求閾值化後的輪廓組合
影象處理中,要求特徵與背景的對比度高,同時,合適的影象分割也是解決問題的關鍵。博主以前的方法,預設為特徵必然是最大的連通域,所以閾值化後,查詢輪廓,直接提取面積最大的輪廓即可。但可能會存在另一種情況,不論怎麼閾值化和膨脹,想要的特徵被分成好幾塊,也即斷開了。此時,再加上一些不可 的干擾和雜訊,fin...
OpenCV學習 輪廓的特徵矩Moment
opencv中的矩主要包括以下幾種 空間矩,中心矩和中心歸一化矩。class moments 空間矩的公式為 可以知道,對於01二值化的影象,m00即為輪廓的面積。中心矩的公式為 其中 歸一化的中心矩公式為 矩的基本概念可參考 在opencv中,還可以很方便的得到hu不變距,hu不變矩在影象旋轉 縮...
opencv學習筆記(二)尋找輪廓
opencv中使用findcontours函式來查詢輪廓,這個函式的原型為 1 void findcontours inputoutputarray image,outputarrayofarrays contours,outputarray hierar 2 chy,int mode,int me...