[英]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
视为“完整图像”,然后调用者有责任将提取区域的角添加到轮廓像素的每个坐标中(在本例中为例)轮廓像原始image
解释的那样?
子图像被视为完整图像,子图像上调用的函数不知道它不是完整图像。
但是,findcontour函数确实采用了ROI坐标的可选参数,以便返回相对于完整图像的轮廓坐标。或者,您可以简单地向每个轮廓点添加偏移量
如果将subImage声明为:
Mat1b subImage = image(cv::Rect(0,0,49,49));
那么任何OpenCV函数都会将subImage
当作完整的Mat对象。 但是,对subImage
所做的任何更改也将反映在image
的相应部分中。
如果要从image
排除subImage
所做的更改,则应使用:
Mat1b subImage = image(cv::Rect(0,0,49,49)).clone();
现在您有一个subImage
没有指向image
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.