Ich benutze cv :: ximgproc :: SuperpixelSLIC opencv C++, um Segmente des Bildes zu generieren. Ich möchte, dass jedes Segment-Label eindeutig ist. Hier ist mein Code.So finden Sie eindeutige Beschriftungen für Segmente in SuperpixelSLIC
Mat segmentImage() {
int num_iterations = 4;
int prior = 2;
bool double_step = false;
int num_levels = 10;
int num_histogram_bins = 5;
int width, height;
width = h1.size().width;
height = h1.size().height;
seeds = createSuperpixelSLIC(h1);
Mat mask;
seeds->iterate(num_iterations);
Mat labels;
seeds->getLabels(labels);
for (int i = 0; i < labels.rows; i++) {
for (int j = 0; j < labels.cols; j++) {
if (labels.at<int>(i, j) == 0)
cout << i << " " << j << " " << labels.at<int>(i, j) << endl;
}
}
ofstream myfile;
myfile.open("label.txt");
myfile << labels;
myfile.close();
seeds->getLabelContourMask(mask, false);
h1.setTo(Scalar(0, 0, 255), mask);
imshow("result", h1);
imwrite("result.png", h1);
return labels;
}
In label.txt Datei I 0 dieses Label beobachten wurde auf zwei Segmente (dh Segment umfassen Pixel angegeben (0,0) und Pixel (692.442). Diese beiden Segmente sind ziemlich weit weg.
Ist Diese normale Sache oder mein Code ist falsch. Bitte helfen Sie mir, eindeutige Bezeichnung für jedes Segment zu finden.
Danke 'David. Übrigens habe ich bereits meinen eigenen Connected-Component-Algorithmus mit DFS aufgeschrieben, um diesen Typ von SLIC-Algorithmus zu entfernen – rajatV