2012-04-13 35 views
7

Me gustaría hacer algo muy simple: copiar un área dentro de una imagen en una nueva área en una nueva imagen. En el cheatsheet OpenCV 2.3, sugieren la siguiente solución:Copiar la región de una imagen a otra región en otra imagen

"Ejemplo 3. Copiar la imagen retorno de la inversión a otra imagen con la conversión"

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

Mi código es el siguiente:

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); 

Solo quiero copiar la imagen frameO en la salida en la ubicación Rect(20,20, frameO.cols, frameO.rows).
¿Alguien me puede decir por qué esto no funciona?

+0

El fragmento de código que proporciona es incompleto. ¿Podría publicar el código completo, incluida la operación en la que realiza la copia? – ypnos

+0

posible duplicado de [¿Cómo establecer el retorno de la inversión en OpenCV?] (Http://stackoverflow.com/questions/8206466/how-to-set-roi-in-opencv) – karlphillip

+0

y también un posible duplicado de http: // stackoverflow .com/questions/6566295/opencv-c-getting-region-of-interest-roi-using-cvmat – karlphillip

Respuesta

13

En realidad estos comandos no funcionaban en OpenCV 2.3 pero ahora el siguiente funciona bien con el 2.4 versión:

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))); 

Esto copiará frame1 de la producción, siempre y cuando el tipo de acuerdo así que tenga cuidado al crear la salida . frame1 se copiará en un ROI en la salida definida por Rect(0, 0, frame1.cols, frame1.rows).

Cuestiones relacionadas