2012-04-13 4 views
7

Ich möchte eine sehr einfache Sache machen: Kopieren Sie einen Bereich innerhalb eines Bildes in einen neuen Bereich in einem neuen Bild. In der OpenCV 2.3 Spickzettel schlagen sie folgende Lösung:Kopieren der Region eines Bildes in eine andere Region in einem anderen Bild

"Beispiel 3. Kopieren Bild ROI auf ein anderes Bild mit conversion"

Rect r(1, 1, 10, 20); 
Mat dstroi = dst(Rect(0,10,r.width,r.height)); 
src(r).convertTo(dstroi, dstroi.type(), 1, 0); 

Mein Code ist folgende:

Mat frameO, frameS; 

original >> frameO; 
stabilized >> frameS; 

Mat output(frameO.rows+40, frameO.cols*2+60, CV_32FC3); 
output.setTo(0);    
Rect r(0,0, frameO.cols, frameO.rows); 
Mat destROI = output(Rect(20,20, frameO.cols, frameO.rows)); 
frameO(r).copyTo(destROI); 

Ich möchte nur das Bild frameO in der Ausgabe an der Stelle Rect(20,20, frameO.cols, frameO.rows) kopieren.
Jeder kann mir sagen, warum das nicht funktioniert?

+0

Das von Ihnen angegebene Codefragment ist unvollständig. Könnten Sie bitte den gesamten Code posten, einschließlich der Operation, in der Sie die Kopie tatsächlich ausführen? – ypnos

+0

mögliche Duplikate von [Wie man ROI in OpenCV einstellen?] (Http://stackoverflow.com/questions/8206466/how-to-set-roi-in-opencv) – karlphillip

+0

und auch ein mögliches Duplikat von http: // stackoverflow .com/questions/6566295/opencv-c-bekommen-region-of-interest-roi-using-cvmat – karlphillip

Antwort

13

Eigentlich wurden diese Befehle funktionieren nicht in OpenCV 2.3, aber nun folgendes arbeitet mit dem 2.4-Release fein:

Mat frame1 = imread(nameReading1); 

Mat output(frame1.rows*2, frame1.cols*2, frame1.type()); 
output.setTo(0); 

frame1.copyTo(output(Rect(0, 0, frame1.cols, frame1.rows))); 

Dies wird solange der Typ übereinstimmen, so vorsichtig sein frame1 in Ausgabe kopieren, wenn Sie die Ausgabe erstellen . frame1 wird in eine ROI in der Ausgabe kopiert, die durch Rect(0, 0, frame1.cols, frame1.rows) definiert ist.