@ -8,12 +8,13 @@ using namespace std;
static void help ( )
{
cout < < " This program demonstrates finding the minimum enclosing box or circle of a set \n "
" of points using functions: minAreaRect() minEnclosingCircle(). \n "
" Random points are generated and then enclosed. \n "
" Call: \n "
" ./minarea \n "
" Using OpenCV v " < < CV_VERSION < < " \n " < < endl ;
cout < < " This program demonstrates finding the minimum enclosing box, triangle or circle of a set \n "
< < " of points using functions: minAreaRect() minEnclosingTriangle() minEnclosingCircle(). \n "
< < " Random points are generated and then enclosed. \n \n "
< < " Press ESC, 'q' or 'Q' to exit and any other key to regenerate the set of points. \n \n "
< < " Call: \n "
< < " ./minarea \n "
< < " Using OpenCV v " < < CV_VERSION < < " \n " < < endl ;
}
int main ( int /*argc*/ , char * * /*argv*/ )
@ -27,6 +28,8 @@ int main( int /*argc*/, char** /*argv*/ )
{
int i , count = rng . uniform ( 1 , 101 ) ;
vector < Point > points ;
// Generate a random set of points
for ( i = 0 ; i < count ; i + + )
{
Point pt ;
@ -36,23 +39,39 @@ int main( int /*argc*/, char** /*argv*/ )
points . push_back ( pt ) ;
}
// Find the minimum area enclosing bounding box
RotatedRect box = minAreaRect ( Mat ( points ) ) ;
// Find the minimum area enclosing triangle
vector < Point2f > triangle ;
double area ;
minEnclosingTriangle ( points , triangle , area ) ;
// Find the minimum area enclosing circle
Point2f center , vtx [ 4 ] ;
float radius = 0 ;
minEnclosingCircle ( Mat ( points ) , center , radius ) ;
box . points ( vtx ) ;
img = Scalar : : all ( 0 ) ;
// Draw the points
for ( i = 0 ; i < count ; i + + )
circle ( img , points [ i ] , 3 , Scalar ( 0 , 0 , 255 ) , FILLED , LINE_AA ) ;
// Draw the bounding box
for ( i = 0 ; i < 4 ; i + + )
line ( img , vtx [ i ] , vtx [ ( i + 1 ) % 4 ] , Scalar ( 0 , 255 , 0 ) , 1 , LINE_AA ) ;
// Draw the triangle
for ( i = 0 ; i < 3 ; i + + )
line ( img , triangle [ i ] , triangle [ ( i + 1 ) % 3 ] , Scalar ( 255 , 255 , 0 ) , 1 , LINE_AA ) ;
// Draw the circle
circle ( img , center , cvRound ( radius ) , Scalar ( 0 , 255 , 255 ) , 1 , LINE_AA ) ;
imshow ( " rect & circle " , img ) ;
imshow ( " Rectangle, triangle & circle" , img ) ;
char key = ( char ) waitKey ( ) ;
if ( key = = 27 | | key = = ' q ' | | key = = ' Q ' ) // 'ESC'