2017-06-26 2 views
0

Ich stieß auf diese Funktion zum Überlagern von transparentem Bild über Hintergrund. https://gist.github.com/maximus5684/082f8939edb6aed7ba0aJava-Äquivalent von opencv C++ Mat-> Daten []

es funktioniert gut in C++. Aber beim Zurückwandeln in Java. Ich bin nicht in der Lage, gleichwertigen Java-Aufruf für diesen bestimmten zu finden.

double opacity = ((double)overlay->data[fY * overlay->step + fX * overlay->channels() + 3])/255;

I offiziellen OpenCV Java Bindung Version 3.1 zu konvertieren es in Java verwenden. Kann mir jemand in die richtige Richtung führen?

+0

Verwenden Sie die offiziellen Java-Bindungen? Bitte geben Sie dies in Ihrer Frage sowie in der OpenCV-Version an. –

+0

Können Sie auch die Definition der Overlay-Matrix angeben? Was sind die erwarteten Dimensionen und der Werttyp? –

+1

Das nimmt nur den Wert des 4. Kanals von 'overlay' an der Position '(fX, fY)', wirft es zum Verdoppeln und skaliert um '1.0/255.0'. –

Antwort

1

Die Verwendung der OpenCV C++ API wäre auch nicht sehr zu empfehlen. Sie haben die Vorlage Mat::at Funktion statt, mit dem Sie den Wert eines bestimmten Punkt der Matrix durch Bezugnahme abrufen können:

double opacity = static_cast<double>(overlay->at<unsigned char>(fy, fx, 3)); 

Da Java nicht Pointer-Arithmetik noch reine Verweise auf Array-Elemente hat, bieten die Bindungen get und put Methode Überladungen. Wenn ich mich richtig erinnere, sollte man so etwas ausprobieren:

double opacity = overlay.get(fy, fx)[3]/255.; 
src.put(y, x, srcPx * (1. - opacity) + overlayPx * opacity); 
+0

Danke, es hat geholfen. Auch hier ist die komplette Konvertierung, wenn jemand es braucht. https://pastebin.com/X3VNqAxA –