0

スケルトン画像から開始点と終了点の 2 つのピクセルの間の一連のピクセルを収集しようとしています。つまり、アイデアは次のとおりです。画像内の位置から始めます。その位置をリストに入れました。その後、ループで

  • リストの先頭にあるポイントを取得して削除し、現在の画像で黒くして、再度追加されないようにします。
  • そのポイントを別のリストに入れます (これが私が欲しいリストです)。その位置の周りのすべてのポイントを見て、それが黒でない場合は、リストの先頭に追加します。その後、ループを再開します。

私はコードを開発しましたが、4 つまたは 5 つのピクセルを追加した後、エンドポイントに到達する前にループが終了します。

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