2012-05-07 17 views

risposta

64

OpenCV 2.4:

src.copyTo(dst(Rect(left, top, src.cols, src.rows))); 

OpenCV 2.x:

Mat dst_roi = dst(Rect(left, top, src.cols, src.rows)); 
src.copyTo(dst_roi); 
+0

grazie! L'ho fatto così e funziona alla grande: bboxImage.copyTo (destImage.colRange (startCol, startCol + bboxImage.cols) .rowRange (startRow, startRow + bboxImage.rows)); – theosem

+1

restituisce 'nessuna funzione di corrispondenza per la chiamata a 'cv :: Mat :: copyTo (cv :: Mat)' viewtest2.cpp: 172: 61: nota: i candidati sono: /usr/include/opencv2/core/core. hpp: 1651: 10: nota: void cv :: Mat :: copyTo (cv :: OutputArray) const' in OpenCV 2.4.6. La seconda soluzione funziona comunque, ma si traduce in un'immagine con solo src. – pbond

+5

qual è la differenza tra la precedente versione di opencv? perché il codice è diverso? – nkint

6

ha funzionato per me in questo modo:

Mat imgPanel(100, 250, CV_8UC1, Scalar(0)); 
Mat imgPanelRoi(imgPanel, Rect(0, 0, imgSrc.cols, imgSrc.rows)); 
imgSrc.copyTo(imgPanelRoi); 

imshow("imgPanel", imgPanel); 
waitKey(); 

Sto usando Opencv 2.4.9 Basato su La risposta di Andrey.

5

In aggiunta o correzione al risposte di cui sopra, se si desidera copiare una regione più piccola di open Mat ad un altro Mat, si dovrebbe fare:

src(Rect(left,top,width, height)).copyTo(dst);