2011-01-05 3 views
3

Ich habe zwei Bilder, die ich übereinander anzeigen möchte. ein Bild ein Einzelkanalbild und das zweite Bild ein RGB-Bild, wobei jedoch der größte Teil der Fläche transparent ist.überlagernde Bilder bei der Anzeige in OpenCV

Wie diese zwei Bilder in verschiedenen Funktionen generiert werden. Ich weiß, um diese nur übereinander anzuzeigen, ich kann den gleichen Fensternamen verwenden, wenn ich cvShowImage() aufrufe, aber das funktioniert nicht, wenn sie von verschiedenen Funktionen gezeichnet werden. Als ich das versuchte, benutzte ich cvCvtcolor(), um das binäre Bild von einem einzelnen Kanal in RGB umzuwandeln und dann das zweite Bild von einer anderen Funktion anzuzeigen. Aber das hat nicht funktioniert. Beide Bilder haben die gleiche Dimension, Tiefe und Anzahl der Kanäle (nach der Konvertierung).

Ich möchte vermeiden, ein Bild in die zweite Funktion zu übergeben und sie dann zu zeichnen. Also suche ich nach einem schnellen schmutzigen Trick, um diese zwei Bilder überlappend darzustellen.

Danke

EDIT: alt text

+0

Sind getan werden versuchen Sie/Blend 2 Bilder hinzufügen? http://StackOverflow.com/Questions/3459960/blending-two-images-by-opencv/3460287#3460287 – karlphillip

+0

nicht genau, mein erstes Bild ist ein binäres Bild zeigt Blobs, und mein zweites Bild enthält die Bounding-Boxen für diese Blobs . Ich möchte sie also nur wörtlich darstellen. Ich bearbeite meinen obigen Beitrag, um die zwei Bilder zu zeigen. – AtharvaI

Antwort

1

Ich glaube nicht, dass das möglich ist. Sie müssen ein neues Bild erstellen oder ein vorhandenes Bild ändern. Hier ist ein Artikel, der zeigt, wie dies zu tun: Transparent image overlays in OpenCV

1

Es gibt keine Möglichkeit, "Overlay" Bilder. cvShowImage() zeigt ein einzelnes Bild aus dem Speicher an. Sie müssen sie zusammenfügen/kombinieren. Es gibt mehrere Möglichkeiten, dies zu tun.
Sie können eins in 1 oder 2 Kanäle des anderen kopieren, Sie können logische Operationen wie AND, OR oder XOR verwenden, Sie können arithmetische Operationen wie Add, Multiply und MultiplyScale verwenden (diese Operationen sättigen Werte größer als 255). All dies kann auch mit einem optionalen Maskenbild wie Ihrem Blob-Bild erfolgen.
Natürlich können Sie dies in einen dritten Puffer tun, um Ihre Originale nicht zu überschreiben.