调整ROI是否会改变cv::Mat的整体大小

Does adjustROI change the wholeSize of cv::Mat?

本文关键字:Mat 调整 是否 改变 cv ROI      更新时间:2023-10-16

>更新:

我原来在这里的问题无效,对不起。我从中省去了一行,m.create被召唤。如果没有答案,我会立即删除这个问题。


我刚刚注意到Mat::adjustROI似乎改变了cv::Mat wholeSize

Mat m(11,11,CV_32FC1);
Size wholeSize, old_size;
Point ofs;
m.locateROI(old_size, ofs);
m.adjustROI(0,old_size.height/2,0,old_size.width/2);
m.locateROI(wholeSize, ofs);
assert(wholeSize==old_size); // fails, wholeSize is now smaller

这正常吗?
如果是这样,我怀疑重新分配,否则这可能是内存泄漏的来源。
如果我是对的,什么时候进行重新分配?

我运行了你的代码,断言对我来说并没有失败(MSVC 2010)。我使用调试器逐步完成了它,我还可以在监视窗口中看到两个大小相等(x 和 y 等于 11)。我是OpenCV的初学者,但从函数的文档来看,adjustROI不应该修改"wholeSize"。

该方法与 cv::Mat::locateROI 互补。的确, 这些函数的典型用途是确定子矩阵位置 在父矩阵中,然后以某种方式移动位置。通常 过滤操作可能需要它,当像素超出 应考虑投资回报率。当方法的所有参数都为 积极的,这意味着投资回报率需要全方位增长 指定金额。