EDIT: Hier ist, wie würde ich das tun, was Sie tun möchten:
Mat left(img_matches, Rect(0, 0, 1088, 2208)); // Copy constructor
imgorig.copyTo(left);
Mat right(img_matches, Rect(1088, 0, 1280, 2208)); // Copy constructor
imgorig2.copyTo(right);
Die Kopierkonstruktoren erstellen eine Kopie des Mat
Header, der von jedem der definierten ROI-Punkte Rect
s.
Voll Code:
#include <cv.h>
#include <highgui.h>
using namespace cv;
int
main(int argc, char **argv)
{
Mat im1 = imread(argv[1]);
Mat im2 = imread(argv[2]);
Size sz1 = im1.size();
Size sz2 = im2.size();
Mat im3(sz1.height, sz1.width+sz2.width, CV_8UC3);
Mat left(im3, Rect(0, 0, sz1.width, sz1.height));
im1.copyTo(left);
Mat right(im3, Rect(sz1.width, 0, sz2.width, sz2.height));
im2.copyTo(right);
imshow("im3", im3);
waitKey(0);
return 0;
}
Kompiliert mit:
g++ foo.cpp -o foo.out `pkg-config --cflags --libs opencv`
EDIT2:
Hier ist, wie es aussieht mit adjustROI
:
#include <cv.h>
#include <highgui.h>
using namespace cv;
int
main(int argc, char **argv)
{
Mat im1 = imread(argv[1]);
Mat im2 = imread(argv[2]);
Size sz1 = im1.size();
Size sz2 = im2.size();
Mat im3(sz1.height, sz1.width+sz2.width, CV_8UC3);
// Move right boundary to the left.
im3.adjustROI(0, 0, 0, -sz2.width);
im1.copyTo(im3);
// Move the left boundary to the right, right boundary to the right.
im3.adjustROI(0, 0, -sz1.width, sz2.width);
im2.copyTo(im3);
// restore original ROI.
im3.adjustROI(0, 0, sz1.width, 0);
imshow("im3", im3);
waitKey(0);
return 0;
}
Sie müssen den aktuellen ROI im Auge behalten, und die Syntax zum Verschieben des ROI kann etwas unintelligent sein. Das Ergebnis entspricht dem ersten Codeblock.
Dies funktioniert auch nicht.Ich denke, die ersten beiden Parameter müssen in beiden Fällen Null sein, da die Höhe beider Bilder (fast) gleich ist und ich sie nur nebeneinander platzieren muss. – code4fun
Ich habe gerade festgestellt, adjustROI verhält sich etwas anders als das, was ich gewohnt bin (das alte C cvSetImageROI). Schau dir meine aktualisierte Antwort an. – misha
Ich hatte etwas ähnliches versucht. Der Kopierkonstruktor gibt eine Kopie der ursprünglichen Matrix, also wenn ich versuche, "img_matches" zu drucken, ist es noch leer. Während das Drucken "links" und "rechts" separat diese Bilder gibt – code4fun