Как установить ROI в OpenCV? - PullRequest
       0

Как установить ROI в OpenCV?

13 голосов
/ 21 ноября 2011

У меня есть два изображения, первое из которых меньше другого. Мне нужно скопировать второе изображение на первое изображение. Для этого мне нужно установить ROI для первого, скопировать второе изображение на первое и затем сбросить ROI.

Однако я использую интерфейс C ++, поэтому понятия не имею, как это сделать. В C я мог бы использовать cvSetImageROI, но это не работает на интерфейсе C ++.

Так что же в основном является C ++ альтернативой cvSetImageROI?

//output is a pointer to the mat whom I want the second image (colourMiniBinMask) copied upon
Rect ROI (478, 359, 160, 120);

Mat imageROI (*output, ROI);

colourMiniBinMask.copyTo (imageROI);

imshow ("Gravity", *output);

Ответы [ 2 ]

17 голосов
/ 22 ноября 2011

Я думаю, у вас что-то не так. Если первое изображение меньше другого, и вы хотите скопировать второе изображение в первом, вам не требуется ROI. Вы можете просто изменить размер второго изображения и скопировать его в первое.

Однако, если вы хотите скопировать первый во второй, я думаю, что этот код должен работать:

cv::Rect roi = cv::Rect((img2.cols - img1.cols)/2,(img2.rows - img1.rows)/2,img1.cols,img1.rows);

cv::Mat roiImg;
roiImg = img2(roi);

img1.copyTo(roiImg);
3 голосов
/ 17 мая 2013

Это код, который я использовал.Я думаю, что комментарии объясняют это.

/* ROI by creating mask for the parallelogram */
Mat mask = cvCreateMat(480, 640, CV_8UC1);
// Create black image with the same size as the original
for(int i=0; i<mask.cols; i++)
   for(int j=0; j<mask.rows; j++)
       mask.at<uchar>(Point(i,j)) = 0;

// Create Polygon from vertices
vector<Point> approxedRectangle;
approxPolyDP(rectangleVertices, approxedRectangle, 1.0, true);

// Fill polygon white
fillConvexPoly(mask, &approxedRectangle[0], approxedRectangle.size(), 255, 8, 0);                 

// Create new image for result storage
Mat imageDest = cvCreateMat(480, 640, CV_8UC3);

// Cut out ROI and store it in imageDest
image->copyTo(imageDest, mask);

Я также написал об этом и поместил несколько фотографий здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...