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

Does cv::Mat_ maintain its ROI?

本文关键字:投资 回报率 Mat 是否 cv      更新时间:2023-10-16

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

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

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

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

findcontour函数接受ROI坐标的可选参数,以便相对于完整图像返回轮廓坐标。或者,您可以简单地为每个轮廓点添加一个偏移

如果您声明subImage为:

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

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

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

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

现在subImage没有指向image