【问题标题】:How to set ROI in OpenCV?如何在 OpenCV 中设置 ROI?
【发布时间】:2012-01-02 15:16:24
【问题描述】:

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

但是我使用的是 C++ 接口,所以我不知道该怎么做。在 C 语言中,我可以使用 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 的图像不受影响 - 它保持不变。我只是获取图像那部分的副本,而不是访问它。 (我认为)。
  • 如果 src 和 dst 矩阵的格式不匹配(即 src=BGR,dst=BGRA),copyTo 函数将重新创建内容。如果是这种情况,“imageROI.data”将被重新分配,您会看到指针的地址将被更改。另一方面,imageROI 的标题将保持不变。在这种情况下使用 mixChannels、merge 或 cvtColor 函数。

标签: c++ c image opencv


【解决方案1】:

这是我使用的代码。我认为 cmets 解释了它。

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

我也写过这个并放了一些图片here

【讨论】:

    【解决方案2】:

    我认为你有问题。如果第一个小于另一个,并且您想在第一个中复制第二个图像,则不需要 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);
    

    【讨论】:

    • 或更短:Mat roiImg(img2, roi);
    • 抱歉,我的意思是第二张图片比第一张小,我想将第二张图片复制到第一张。我试过你的代码,但它不起作用。图像 1(我想要改变 ROI 的图像)根本没有改变。我在上面的问题中包含了我的代码。还有其他建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多