如何在OpenCV中设置ROI?

我有两个图像,第一个比另一个小。 我需要在第一张图片上复制第二张图片。 为此,我需要在第一个上设置ROI,将第二个图像复制到第一个上,然后重置ROI。

但是我使用C ++接口,所以我不知道如何做到这一点。 在CI中可以使用cvSetImageROI,但这在C ++接口上不起作用。

那么基本上cvSetImageROI的C ++替代品是什么?

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

我觉得你错了。 如果第一个小于另一个并且您想要复制第一个图像,则不需要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); 

这是我使用的代码。 我认为这些评论可以解释它。

 /* 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(Point(i,j)) = 0; // Create Polygon from vertices vector 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); 

我也写了这个,并在这里放了一些照片。