Hallo, was ich habe, ist ein paar Mat
, die ich (in einer benutzerdefinierten Reihenfolge) überlagern möchte. Die enthält einige opencv Polygone (was eine Menge Transparenz bedeutet). Diese Ich muss überlagern/zusammenführen. Aber nicht mit der klassischen Alpha-Mischung mehr wie mit einer 100% Opazität, sondern mit Transparenz.OpenCv Overlay zwei Mat (Zeichnungen nicht Bilder) mit Transparenz
Dies ist ein einfacher Beispielcode von dem, was ich zusammenführen möchte.
Mat m1, m2;
m1.create(Point{ 100,100 }, CV_8UC4);
m2.create(Point{ 100,100 }, CV_8UC4);
cv::polylines(m1, std::vector<Point>{ Point{ 2,20 },Point{ 20,40 } }, true, Scalar(6, 6, 255));
cv::polylines(m2, std::vector<Point>{Point{ 100,100 }, Point{ 0,0 } }, true, Scalar(192, 112, 0));
Bitte beachten Sie, dass ich nicht die Polygone direkt in einem Mat
aus verschiedenen Gründen ziehen.
dachte ich, dass vielleicht m1.copyTo(m2);
funktionieren wird, aber sein überschreibt alles (inkl. Der schwarze Hintergrund)
Jede Idee, wie es ohne den Hintergrund verschmolzen/überarbeitbar zu bekommen? Kann ich die Matte falsch konstruieren?
Erstellen einer Maske der Stücke, die Sie kopieren möchten (i alles erraten, die nicht schwarz ist), und verwenden Sie dann 'copyTo' mit dieser Maske. –
@ DanMašek kennst du irgendeine clevere Funktion, um das Schwarz/alles außer dem Schwarzen zu erkennen? Ich habe versucht 'cv :: threshold (m1, m1, 1, 255, cv :: THRESH_BINARY);' aber es funktioniert nicht sehr gut. – user1234
fügen Sie Beispielbilder der Zeichnungen hinzu. – Micka