1

更新:

我原来的问题在这里是无效的,对不起。我留下了一条线,在那里m.create被调用。如果对此没有答案,我将立即删除该问题。


我刚刚注意到这Mat::adjustROI似乎改变wholeSizecv::Mat.

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

这是正常的吗?
如果是这样,我怀疑重新分配,否则这可能是内存泄漏的根源。
如果我是对的,那么重新分配何时发生?

4

1 回答 1

0

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

该方法是对 cv::Mat::locateROI 的补充。实际上,这些函数的典型用途是确定父矩阵中的子矩阵位置,然后以某种方式移动位置。通常,当应考虑 ROI 之外的像素时,可能需要它进行过滤操作。当方法的所有参数都为正时,这意味着 ROI 需要向各个方向增长指定的数量。

于 2012-12-18T16:47:20.747 回答