opencv_tutorial_code学习——findContours&drawContours&画最小包围矩形&画最小包围圆
2017-12-28 11:19
691 查看
tutorial_code\ShapeDescriptors\generalContours_demo1.cpp
步骤:
1、灰度化
2、滤波
3、二值化
4、画轮廓
findContours( threshold_output, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0) );
for( size_t i = 0; i< contours.size(); i++ )
{
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours_poly, (int)i, color, 1, 8, vector<Vec4i>(), 0, Point() );
}
5、画最小包围矩形和最小包围圆
第一步:
vector<vector<Point> > contours_poly( contours.size() );
vector<Rect> boundRect( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );
第二步:
for( size_t i = 0; i < contours.size(); i++ )
{
approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
boundRect[i] = boundingRect( Mat(contours_poly[i]) );
minEnclosingCircle( contours_poly[i], center[i], radius[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) );
rectangle( drawing1, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0 );
circle( drawing2, center[i], (int)radius[i], color, 2, 8, 0 );
}
结果图像:
原图:
轮廓图:
最小包围矩形图:
最小包围圆图:
步骤:
1、灰度化
2、滤波
3、二值化
4、画轮廓
findContours( threshold_output, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0) );
for( size_t i = 0; i< contours.size(); i++ )
{
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours_poly, (int)i, color, 1, 8, vector<Vec4i>(), 0, Point() );
}
5、画最小包围矩形和最小包围圆
第一步:
vector<vector<Point> > contours_poly( contours.size() );
vector<Rect> boundRect( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );
第二步:
for( size_t i = 0; i < contours.size(); i++ )
{
approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
boundRect[i] = boundingRect( Mat(contours_poly[i]) );
minEnclosingCircle( contours_poly[i], center[i], radius[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) );
rectangle( drawing1, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0 );
circle( drawing2, center[i], (int)radius[i], color, 2, 8, 0 );
}
结果图像:
原图:
轮廓图:
最小包围矩形图:
最小包围圆图:
相关文章推荐
- opencv_tutorial_code学习——画最小包围旋转矩形&画最小包围椭圆
- opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子
- opencv_tutorial_code学习——画椭圆、圆、填充矩形、直线
- opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子
- opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子
- opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子
- opencv之查找轮廓---cvFindContours && cvDrawCountours 用法及例子
- opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子
- opencv_tutorial_code学习——moments()中心距&面积&边长
- opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子
- opencv_tutorial_code学习——画凸包convexHull()
- 【OpenCV笔记 15-3】OpenCV计算物体最小包围矩形面积和周长
- opencv_tutorial_code学习——图像滤波与风格化
- opencv3.1 example解析1 求最小包围圆和最小包围矩形以及最小包围三角形
- cvFindContours && cvDrawContours 的应用2-----图像内轮廓填充
- opencv_tutorial_code学习——hdr_imaging
- opencv cvFindContours 查找轮廓 cvDrawCountours 用法及例子
- opencv3寻找最小包围矩形-minAreaRect函数
- 【opencv学习之三十四】轮廓特征应用:最小外接矩形和圆
- opencv3寻找最小包围矩形在图像中的应用-滚动条