我正在尝试收集两个像素之间的一组像素:骨架图像的起点和终点。所以想法是:我从图像中的一个位置开始。我把那个位置放在一个列表中。然后在一个循环中
- 我获取并删除列表开头的点,并在当前图像中将其设为黑色,这样就不会再次添加它。
- 我将该点放在另一个列表中(这是我想要的列表)。我查看该位置周围的每个点,如果它不是黑色的,则将其添加到列表的开头。然后再次开始循环。
我已经开发了一段代码,但循环在添加四个或五个像素后结束,然后到达终点。
vector<Point> traceLine(Mat img , Point peak)
{
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());
vect2.push_back(p);
vector<Point> vectN;
vectN=search8Neighbor(img,p);
vector<Point>::iterator it;
it = vect1.begin();
cout<<vectN.size()<<endl;
if(vectN.size()!=0)
{
for(int i=0;i<vectN.size();i++)
vect1.insert(it,vectN[i]);
}
}
return vect2;
}