Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Extract connected pixels using the idea of Breadth-first search

I am trying to collect a set of pixels between two pixels:start and end point from a skeleton image . image description So the idea is : I start on a position in the image. I put that position in a list. Then in a loop,

  • I get and remove the point at the beginning of the list and make it black in the current image so it won't be added again.
  • I put that point in another list (this is the list that you want).I look at every point around the position and if it is not black, add it to the beginning of the list.

Then start the loop again.

I have develop a piece of code but the loop ends after adding four or five pixels ,before arriving to the end point

Extract connected pixels using the idea of Breadth-first search

I am trying to collect a set of pixels between two pixels:start and end point from a skeleton image . image description So the idea is : I start on a position in the image. I put that position in a list. Then in a loop,

  • I get and remove the point at the beginning of the list and make it black in the current image so it won't be added again.
  • I put that point in another list (this is the list that you want).I look at every point around the position and if it is not black, add it to the beginning of the list.

Then start the loop again.

I have develop a piece of code but the loop ends after adding four or five pixels ,before arriving to the end point

vector<point> traceLine(Mat img , Point peak) { bool verif; vector<point> vect1; vector<point> vect2; vect1.push_back(peak); while(vect1.size() != 0) { Point p=vect1[0]; img.at<uchar>(p.x,p.y)=0; vect1.erase(vect1.begin()); //cout<<vect1[1];< p="">

vect2.push_back(p); vector<point> vectN; vectN=search8Neighbor(img,p); cout<<vectn.size()&lt;<endl; if(vectn.size()!="0)" {="" for(int="" i="0;i&lt;vectN.size();i++)&lt;/p">

vect1.push_back(vectN[i]);

} // } return vect2; }

Extract connected pixels using the idea of Breadth-first search

I am trying to collect a set of pixels between two pixels:start and end point from a skeleton image . image description So the idea is : I start on a position in the image. I put that position in a list. Then in a loop,

  • I get and remove the point at the beginning of the list and make it black in the current image so it won't be added again.
  • I put that point in another list (this is the list that you want).I look at every point around the position and if it is not black, add it to the beginning of the list.

Then start the loop again.

I have develop a piece of code but the loop ends after adding four or five pixels ,before arriving to the end point

vector<point>

 vector<Point> traceLine(Mat img , Point peak)
 {
 bool verif;
vector<point> 
vector<Point> vect1;
 vector<point> vector<Point> vect2;
 vect1.push_back(peak);
 while(vect1.size() != 0)
 {
 Point p=vect1[0];
 img.at<uchar>(p.x,p.y)=0;
 vect1.erase(vect1.begin());
//cout<<vect1[1];< p="">

//cout<<vect1[1]; vect2.push_back(p); vector<point> vector<Point> vectN; vectN=search8Neighbor(img,p); cout<<vectn.size()&lt;<endl; if(vectn.size()!="0)" {="" for(int="" i="0;i&lt;vectN.size();i++)&lt;/p">

 cout<<vectN.size()<<endl;
if(vectN.size()!=0)
{
for(int i=0;i<vectN.size();i++)
vect1.push_back(vectN[i]);

}
}
return vect2;
}

} // } return vect2; }