Come impostare il ROI in OpenCV?

Ho due immagini, la prima più piccola dell’altra. Ho bisogno di copiare la seconda immagine sulla prima immagine. Per fare ciò, ho bisogno di impostare la ROI sulla prima, copiare la seconda immagine sulla prima e quindi ripristinare la ROI.

Comunque sto usando l’interfaccia C ++ quindi non ho idea di come farlo. In CI avrebbe potuto usare cvSetImageROI ma questo non funziona sull’interfaccia C ++.

Quindi, in pratica, qual è l’alternativa C ++ a 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); 

Penso che tu abbia qualcosa di sbagliato. Se il primo è più piccolo dell’altro e vuoi copiare la seconda immagine nel primo, non hai bisogno di una ROI. Puoi semplicemente ridimensionare la seconda immagine copiandola nella prima.

Tuttavia, se vuoi copiare il primo nel secondo, penso che questo codice dovrebbe funzionare:

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

Questo è il codice che ho usato. Penso che i commenti lo spieghino.

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

Ho anche scritto su questo e mettere alcune foto qui .