Verwenden Sie get () und put (), um auf Pixelwerte in OpenCV für Java zuzugreifen

Ich bin ein Anfänger in der Verwendung von OpenCV für Java. Ich möchte auf einzelne Pixelwerte einer Bildmatrix zugreifen. Da JAVA jar für OpenCV keine netten Funktionen wie C ++ bietet, bin ich auf einige Probleme gestoßen. Nach langem Suchen habe ich zwei verschiedene Methoden gefunden, die jedoch nicht richtig erklärt werden (auch nicht in der Dokumentation). Dies können wir entweder mit den Funktionen get () und put () tun oder indem wir die Mat-Daten in einen primitiven Java-Typ wie Arrays konvertieren. Ich habe beide ausprobiert, aber unterschiedliche Ausgabeergebnisse erzielt! 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, bitte verzeihen Sie, wenn es eine dumme Frage ist. :)

FALL 1: Verwenden der Funktion get ()

Mat A = Highgui.imread(image_addr); \\"image_addr" is the address of the image
Mat C = A.clone();
Size sizeA = A.size();
for (int i = 0; i < sizeA.height; i++)
    for (int j = 0; j < sizeA.width; j++) {
        double[] data = A.get(i, j);
        data[0] = data[0] / 2;
        data[1] = data[1] / 2;
        data[2] = data[2] / 2;
        C.put(i, j, data);
    }

FALL 2: Array verwenden

Mat A = Highgui.imread(image_addr); \\"image_addr" is the address of the image
Mat C = A.clone();
int size = (int) (A.total() * A.channels());
byte[] temp = new byte[size];
A.get(0, 0, temp);
for (int i = 0; i < size; i++)
   temp[i] = (byte) (temp[i] / 2);
C.put(0, 0, temp);

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

Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage