Ich versuche, ein Bild mit OpenCV, die eine 400x400-Matte zu drucken:OpenCV nicht erkennen Mat Größe
plot2 = cv::Mat(400,400, CV_8U, 255);
Aber wenn ich die Punkte versuchen, drucken, geschieht etwas Seltsames. Die Y-Koordinate druckt nur auf die ersten 100 Werte. Das heißt, wenn ich den Punkt (50,100) drucke, wird er nicht im 100/400-ten Teil der Spalten gedruckt, sondern am Ende. Irgendwie haben 400 Spalten verwandelte sich in 100
Zum Beispiel bei der Ausführung dieser:
for (int j = 0; j < 95; ++j){
plot2.at<int>(20, j) = 0;
}
cv::imshow("segunda pared", plot2);
Dies zeigt (der unterstrichene Teil ist der Teil oben auf den Code entspricht):
Eine Zeile, die auf 95 geht, belegt fast alle 400 Punkte, wenn sie nur 95/400 des Bildschirms einnehmen soll.
Was mache ich falsch?
Sind Sie sicher, dass Sie über die „Wichtiger Hinweis“ Abschnitt? Können Sie eine Quelle für diese Informationen bereitstellen? Heißt das, wenn Sie ein Bild als 'plot2 = cv :: Mat (400,400, CV_16U, 255) erstellen;' Zugreifen mit 'plot2.at (20, j) = 0;' wäre falsch? Ich denke nicht. –
Antonio
Ja, ziemlich sicher. Ich habe jetzt keinen OpenCV-Code in meiner Hand. und die Suche nach einem Teil des Codes online ist schwer. Sehen Sie das für jetzt http://stackoverflow.com/a/32663709/4523099 Ich werde versuchen, später eine klare Referenz für meine Notiz zu bringen. –
Vielen Dank für das Aufzeigen! Ich habe etwas recherchiert, ich habe meine Ergebnisse als zusätzliche Antwort [dort] gepostet (http://stackoverflow.com/a/37484930/2436175). Ich denke, Ihre Antwort könnte ein bisschen präziser sein: Es ist wahr, man sollte nicht 'uint16_t' verwenden, aber es ist nicht klar, was man eigentlich verwenden sollte (wahrscheinlich wäre unsigned short gut, aber an dieser Stelle würde ich den Ansatz bevorzugen in meiner Antwort). – Antonio