2017-07-20 4 views
0

I findNonZero (img, nonZeroCoordinates) verwenden die alle Nicht-Null Punkte zu speichern in nonZeroCoordinates, die eine Mat.OpenCV: Holen Sie sich alle "Punkt" gespeichert in "Mat"

Nun möchte ich alle diese Punkte in einem Vektor für die weitere Verarbeitung speichern. Meine Frage ist „Ist das möglich, alle Punkte in Matte auf einfache Weise gespeichert zu bekommen?

Soweit ich weiß, ich durch nonZeroCoordinates und speichern alle Punkte one-by-one laufen kann im Vektor.

Mat nonZeroCoordinates; 
vector<Point> inds; 
for (int i = 0; i < nonZeroCoordinates.total(); i++) { 
    Point pt(nonZeroCoordinates.at<Point>(i).x, nonZeroCoordinates.at<Point>(i).y);  
    inds.push_back(pt); 
} 

Wie Sie sehen können, sieht der Code ziemlich redundant aus. Ist es möglich, es einfacher zu machen?

+0

Speichern Sie die temporäre und tun 'inds.push_back (nonZeroCoordinates.at (i));' –

Antwort

0

OpenCVs findNonZero-Funktion überlagert auch einen Vektor von Punkten als Ausgabeparameter. Anstatt das Ergebnis in Mat Objekt zu speichern, können Sie es speichern, direkt in einen Vektor, wie folgt:

vector<Point> inds; 
cv::findNonZero(inputMatrix, inds);