cv::Mat_是否保持其投资回报率?
Does cv::Mat_ maintain its ROI?
假设我有一个100x100的cv::Mat1b
称为image
。然后我做:
cv::Mat1b subImage = image(cv::Rect(0,0,49,49));
使左上角的image
变为subImage
。然后说我把subImage
传递给一个函数,比如cv::findContours
。生成的轮廓是否相对于image
或subImage
?也就是说,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