【opencv练习34 - 轮廓包围圆,矩形】

来源:互联网 发布:数据库一体机价格 编辑:程序博客网 时间:2024/06/11 19:03
/*******************************************************    测试程序【轮廓的包围矩形,圆】    时间:2016年9月3日********************************************************/Mat src; Mat src_gray;int thresh = 100;int max_thresh = 255;RNG rng(12345);void thresh_callback(int, void* );int main(void){  src = imread("Image.jpg", 1 );  cvtColor( src, src_gray, COLOR_BGR2GRAY );  blur( src_gray, src_gray, Size(3,3) );  const char* source_window = "Source";  namedWindow( source_window, WINDOW_AUTOSIZE );  imshow( source_window, src );  createTrackbar( " Threshold:", "Source", &thresh, max_thresh, thresh_callback );  thresh_callback( 0, 0 );  waitKey(0);  return(0);}void thresh_callback(int, void* ){  Mat threshold_output;  vector<vector<Point> > contours;  vector<Vec4i> hierarchy;  //【1、阈值检测 + findContours】   threshold( src_gray, threshold_output, thresh, 255, THRESH_BINARY );  //【threshold_output ——> contours】  findContours( threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );  //【2、多边形轮廓逼近】   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++ )     {//【轮廓——多边形contours ——> contours_poly】         approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );           //【多边形——矩形contours_poly ——> boundRect】         minEnclosingCircle( contours_poly[i], center[i], radius[i] );          //【多边形——圆  contours_poly ——> center[i], radius[i]】     }  //【3、绘制 多边形轮廓 + 矩形 + 圆】  Mat drawing = 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) );               drawContours( drawing, contours_poly, (int)i, color, 1, 8, vector<Vec4i>(), 0, Point() );    //绘制多边形轮廓       rectangle( drawing, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0 );                  //矩形       circle( drawing, center[i], (int)radius[i], color, 2, 8, 0 );                                //圆形     }  /// Show   namedWindow( "Contours", WINDOW_AUTOSIZE );  imshow( "Contours", drawing );}

这里写图片描述

0 0
原创粉丝点击