使用广度优先搜索的概念提取连接的像素

时间:2013-05-17 11:33:25

标签: c++ opencv

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

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

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

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

0 个答案:

没有答案