簡體   English   中英

如何在OpenCV中設置ROI?

[英]How to set ROI in OpenCV?

我有兩個圖像,第一個小於另一個。 我需要將第二張圖片復制到第一張圖片上。 為此,我需要在第一個圖像上設置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<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);

我也寫了這個,並在這里放了一些圖片。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM