0

我正在尝试收集两个像素之间的一组像素:骨架图像的起点和终点。所以想法是:我从图像中的一个位置开始。我把那个位置放在一个列表中。然后在一个循环中

  • 我获取并删除列表开头的点,并在当前图像中将其设为黑色,这样就不会再次添加它。
  • 我将该点放在另一个列表中(这是我想要的列表)。我查看该位置周围的每个点,如果它不是黑色的,则将其添加到列表的开头。然后再次开始循环。

我已经开发了一段代码,但循环在添加四个或五个像素后结束,然后到达终点。

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;
}
4

0 回答 0