cv::Mat_ 是否保持其投资回报率?

Does cv::Mat_ maintain its ROI?

假设我有一个名为 image 的 100x100 cv::Mat1b。然后我做:

cv::Mat1b subImage = image(cv::Rect(0,0,49,49));

image的左上角变成subImage。然后说我将 subImage 传递给一个函数,比如 cv::findContours。生成的等高线是相对于 image 还是 subImage?也就是说,findContours()是否知道subImage其实是一个子图?或者所有的 OpenCV 函数只是将像这样提取的 subImage 视为 "full image" 然后调用者负责将提取区域的角添加到轮廓像素的每个坐标(在本例中case) 以获得原始 image?

中解释的轮廓

子图像被视为完整图像,子图像上调用的函数不知道它不是完整图像。

然而,findcontour 函数确实采用了 ROI 坐标的可选参数,以便返回相对于完整图像的轮廓坐标或者您可以简单地为每个轮廓点添加一个偏移量

如果将 subImage 声明为:

Mat1b subImage = image(cv::Rect(0,0,49,49));

那么 subImage 将被任何 OpenCV 函数视为一个完整的 Mat 对象。 但是,在 subImage 中所做的任何更改也将反映在 image 的相应部分。

如果您想从 image 中排除在 subImage 中所做的更改,您应该使用:

Mat1b subImage = image(cv::Rect(0,0,49,49)).clone();

现在你有一个 subImage 不指向 image