opencv_tutorial_code学习——画最小包围旋转矩形&画最小包围椭圆
tutorial_code\ShapeDescriptors\generalContours_demo2.cpp
步骤:
1、灰度化
2、滤波
3、二值化
4、画轮廓 findContours()
5、画最小包围旋转矩形和最小包围椭圆
vector<RotatedRect> minRect( contours.size() );
vector<RotatedRect> minEllipse( contours.size() );
for( size_t i = 0; i < contours.size(); i++ )
{ minRect[i] = minAreaRect( Mat(contours[i]) );
if( contours[i].size() > 5 )
{ minEllipse[i] = fitEllipse( Mat(contours[i]) ); }
}
Mat drawing = Mat::zeros( threshold_output.size(), CV_8UC3 );
Mat drawing1 = Mat::zeros(threshold_output.size(), CV_8UC3);
Mat drawing2 = Mat::zeros(threshold_output.size(), CV_8UC3);
for( size_t i = 0; i< contours.size(); i++ )
{
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
// contour
drawContours( drawing, contours, (int)i, color, 1, 8, vector<Vec4i>(), 0, Point() );
// ellipse
ellipse( drawing1, minEllipse[i], color, 2, 8 );
// rotated rectangle
Point2f rect_points[4]; minRect[i].points( rect_points );
for( int j = 0; j < 4; j++ )
line( drawing2, rect_points[j], rect_points[(j+1)%4], color, 1, 8 );
}
结果图像: