スケルトン画像から開始点と終了点の 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;
}