我试图通过执行类似
的操作从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.y
,roi.height
和m.rows
)?我认为只要roi.x
和roi.y
在m
以及roi.width <= m.cols
和roi.height <= m.rows
之内就可以了。
答案 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
,但您仍然不在界限范围内。