2012-05-07 5 views
40

Мне нужно скопировать cv::Mat изображение (источник) в ROI другого (Назначение) cv::Mat image.Скопируйте cv :: Mat внутри ROI другого

Я нашел this reference, но кажется, что это не работает для моего дела. У вас есть указатели, как я могу это сделать, используя интерфейс OpenCV C++?

ответ

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

спасибо! Я сделал это так и отлично работал: bboxImage.copyTo (destImage.colRange (startCol, startCol + bboxImage.cols) .rowRange (startRow, startRow + bboxImage.rows)); – theosem

+1

Учетная способность 'не соответствует функции для вызова 'cv :: Mat :: copyTo (cv :: Mat)' viewtest2.cpp: 172: 61: note: кандидаты: /usr/include/opencv2/core/core. hpp: 1651: 10: note: void cv :: Mat :: copyTo (cv :: OutputArray) const' в OpenCV 2.4.6. Второе решение действительно работает, но оно приводит к созданию изображения с помощью только src. – pbond

+5

В чем разница между предыдущей версией opencv? почему код отличается? – nkint

6

ли работа для меня так:

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

Я использую OpenCV 2.4.9 основе Ответ Андрея.

5

В дополнение или поправка к выше ответов, если вы хотите скопировать меньшую область открытого Mat другому Mat, вы должны сделать:

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