EDIT: Ecco come farei quello che si vuole fare:
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);
I costruttori di copia creare una copia del Mat
intestazione che punta al ROI definita da ciascuno dei Rect
s.
codice completo:
#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;
}
Compila con:
g++ foo.cpp -o foo.out `pkg-config --cflags --libs opencv`
EDIT2:
Ecco come appare con 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;
}
Devi tenere traccia di quale sia il ROI corrente e la sintassi per spostare il ROI può essere un po 'poco intuitiva. Il risultato è lo stesso del primo blocco di codice.
Anche questo non funziona. Penso che i primi 2 parametri debbano essere pari a zero in entrambi i casi, perché l'altezza di entrambe le immagini è (quasi) uguale e ho solo bisogno di metterle una accanto all'altra. – code4fun
Mi sono appena reso conto che adjustROI si comporta in modo leggermente diverso rispetto a quello a cui sono abituato (il vecchio C cvSetImageROI). Controlla la mia risposta aggiornata. – misha
avevo provato qualcosa di simile.Il costruttore di copie sta dando una copia della matrice originale, quindi quando provo a stampare "img_matches" è ancora vuoto.Mentre la stampa "sinistra" e "destra" dà separatamente quelle immagini – code4fun