Verketten Matte in OpenCV
Habe ich ein paar Bilder in Mat
alle Objekte mit gleichen Abmessungen
Ich möchte, um eine zu erstellen bix cv::Mat
Objekt, halten Sie alle
Also die dimension der neuen matrix ist: widthNew = widthOld x Anzahl der Matrizen, die Höhe bleibt unverändert.
Fand ich, dass eine solche Kopie kann gemacht werden mit:
void cvCopy(const CvArr* src, CvArr* dst, const CvArr* mask=NULL)
aber dann, wie könnte man die Maske definiert werden, die drei verschiedene Zeiten für die drei Matrizen?.
Grüße,
Moataz
- Darauf achten, dass die max Größe für ein IplImage ist irgendwo um die 4000*4000. Möglicherweise müssen Sie auch zu verringern, Auflösung der input-Bild
- Maske ist optional, Sie brauchen nicht zu definieren.
- okay. Ich werde das im Hinterkopf behalten, thnx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie eine roi-zu definieren, ein Bild, das ist tatsächlich eine region des Ziel-Bild und kopieren Sie dann die. sehen Kopieren Sie eine cv::Mat inneren ein ROI von einem anderen
Ich denke, es ist eine einfache Möglichkeit, dies zu tun. OpenCV hat einen nicht dokumentierten Methoden genannt
hconcat()
undvconcat()
. Die erste ist für die horizontale Verkettung und der zweite für die vertikale Verkettung.Können Sie Sie in dieser Art und Weise:
Ich hoffe, dass dies helfen kann.
vconcat(out, out1, out); vconcat(out, out2, out);
funktionierte gut für mich in einem Multithread-Kontext (für das kombinieren der Ausgabe von einzelnen threads).Werden Sie wahrscheinlich wollen, schauen Sie bei der Quellcode von
cvShowManyImages()
, das ist eine Funktion, mehrere Bilder als Eingabe und verkettet diese zu einer einzigen 3-Kanal-Bild angezeigt werden:Wenn Sie eine Ziel-image-groß genug, um halten Sie Ihre anderen Bilder, die Sie nicht brauchen, um Ihre Größe verändern.
Wenn Sie wissen möchten, wie das konvertieren zwischen
IplImage
<->cv::Mat
überprüfen dieser thread.