c++ - FindContour: Measure distance between contours -


i thankful know further on post: finding minimum distance between contours

i using findcontours , required getting multiple contours. problem want find min distance between each adjacent pair, e.g. between yellow contour , dark green, between dark green , cyan, between cyan , purple.

i understood general method above post. can please tell me how can select them 1 after another(automaticaly)?

enter image description here

void thresh_function(int, void*) {          mat canny_output;         vector<vector<point> > contours;         vector<vec4i> hierarchy;         /// detect edges using canny         canny( roiimg, canny_output, threshold_value, threshold_value*2, 3 );       /// find contours         findcontours( canny_output, contours, hierarchy, cv_retr_tree, cv_chain_approx_simple, point(0, 0) );        /// draw contours         mat drawing = mat::zeros( canny_output.size(), cv_8uc3 );         for( int = 0; i< contours.size(); i++ )          {            scalar color = scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );            drawcontours( drawing, contours, i, color, 2, 8, hierarchy, 0, point() );//scalar(255,255,255)          }          erode(drawing,drawing,erodeelement2);         erode(drawing,drawing,erodeelement1);         dilate(drawing,drawing,dilateelement);        /// show in window      //namedwindow( "contours", cv_window_autosize );      resize(drawing, enlarged0, size(), 2, 2, cv_inter_cubic);      done = 1;      imshow("contours", enlarged0); } 

vector<vector<point> > all_contours; ...  findcontours(... all_contours ... cv_chain_approx_none ...); ...  // remove small contours int minsize = 20; vector<vector<point> > contours; contours.reserve(all_contours.size()); for(int i=0; i<all_contours.size(); ++i) {     if(all_contours[i].size() > minsize)      {          contours.push_back(all_contours[i]);     } }    mat1f dist(contours.size(), contours.size(), 0.f); for(int i=0; i<contours.size()-1; ++i) {     const vector<point>& firstcontour = contours[i];     for(int j=i+1; j<contours.size(); ++j)     {         const vector<point>& secondcontour = contours[j];         float d = compute_pairwise_distance(firstcontour, secondcontour); // should implement         dist(i,j) = d;         dist(j,i) = d;  // distance first second equal                         // distance second first      } }  // dist contains pairwise distances between i-th , j-th contours 

Comments