Mit get () und put () auf Pixelwerte in OpenCV für Java zugreifen

9

Ich bin ein Anfänger bei der Verwendung von OpenCV für JAVA. Ich möchte auf einzelne Pixelwerte einer Bildmatrix zugreifen. Da JAVA jar für OpenCV keine schönen Funktionen wie C ++ bietet, geriet ich in Schwierigkeiten. Nach vielen Suchen habe ich zwei verschiedene Methoden gefunden, um das zu tun, obwohl sie nicht richtig erklärt wurden (nicht einmal in der Dokumentation). Das können wir entweder mit den Funktionen get () und put () tun oder indem wir die Mat-Daten in einen primitiven Java-Typ wie Arrays umwandeln. Ich habe beides versucht, aber unterschiedliche Ausgabeergebnisse erhalten! Bitte helfen Sie zu erklären, was ich falsch mache. Benutze ich sie falsch oder ein anderes dummes Problem. Ich bin immer noch ein Neuling, also bitte vergib, wenn es eine dumme Frage ist. :)

Fall 1: Verwenden der Funktion get ()

%Vor%

Fall 2: Verwenden von Array

%Vor%

Nun sollten beide nach meinem Verständnis dasselbe tun. Beide greifen auf die einzelnen Pixelwerte (alle 3 Kanäle) zu und machen sie zur Hälfte. Ich bekomme keinen Fehler nach dem Laufen. Aber das Ausgabebild, das ich erhalte, ist in diesen beiden Fällen unterschiedlich. Kann mir bitte jemand erklären, worum es geht? Kann ich nicht genau verstehen, wie die Funktion get () funktioniert? Liegt es am byte () Casting? Bitte helfen.

Danke!

    
gargsl 11.06.2013, 00:50
quelle

2 Antworten

9

Es geschah wegen byte () Casting. Ich habe den Datentyp von mat image im zweiten Fall in * CV_64FC3 * geändert, so dass ich double [] anstelle von byte [] verwenden kann und das Problem gelöst wurde.

%Vor%

Zu Ihrer Information, ich habe auch eine Zeitmessung gemacht und die zweite Methode ist viel schneller als die erste Methode.

    
gargsl 11.06.2013, 16:51
quelle
1

Nach langer Suche eine einfache und funktionierende Lösung gefunden -

%Vor%

Hinweis: Ein wichtiger Punkt, der nirgendwo online erwähnt wurde, ist, dass die Methode put keine Pixel in Input.jpg schreibt. Es aktualisiert lediglich die Werte der Matrix img . Daher ändert der obige Code nichts im Eingabebild. Um eine sichtbare Ausgabe zu erzeugen, muss die Matrix img in diesem Fall in eine Datei geschrieben werden, d. H.% Co_de%. Außerdem scheint die Verwendung von Output.jpg ein besserer Weg zu sein, die Matrixelemente zu handhaben als die oben genannte akzeptierte Lösung, da dies hilft, die Bildmatrix besser zu visualisieren und zu bearbeiten, und keine große zusammenhängende Speicherzuweisung erfordert / p>     

CrakC 19.10.2015 20:40
quelle