带有Rect参数的OpenCV Mat构造函数

时间:2016-03-27 20:59:44

标签: opencv

我试图通过执行类似

的操作从Mat获取子垫
    Mat subImage = Image(rect);

当我这样做时,即使rect在图像边界内,我也会收到以下错误:

  

OpenCV错误:断言失败(0< = roi.x&& 0< = roi.width&& roi.x + roi.width< = m.cols&& 0< Mat中的; = roi.y&& 0< = roi.height&& roi.y + roi.height< = m.rows)

为什么roi.x + roi.width需要小于/等于m.cols(类似于roi.yroi.heightm.rows)?我认为只要roi.xroi.ym以及roi.width <= m.colsroi.height <= m.rows之内就可以了。

2 个答案:

答案 0 :(得分:0)

要避免Assertion fail您可以根据需要更正rect边界

rect = rect & Rect(0,0,Image.cols,Image.rows);
Mat subImage = Image(rect);

答案 1 :(得分:0)

假设你的主图像是100x100。你的roi的起点是roi.x,让我们说它是30点。这样你离图像的边缘就70了,所以你的roi.width可以是任何高达70的,而不会超出界限,因此需要roi.x + roi.width < m.cols。例如,如果您有roi.width == 80,那就小于m.cols,但您仍然不在界限范围内。