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 に答える