1

次のコードがあります。

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
int main()
{
    cv::VideoCapture capture(0);
    cv::Mat frame;
    capture>>frame;
    cv::Mat img = frame.clone();
    cv::Mat img2 = frame; // here still the refcount stays null in xcode.
    return 0;
}

それから

frame.refcount ==NULL; // could be wrong
img->refcount == 1; // good
img2.refcount ==NULL; // certainly wrong, should be pointing to 2, at the same address as frame.refcount.

すべてが正常に動作しているようですが、私は物事を調べたところ、 の refcountframeは単なる null ポインターであることが判明しました (そして の後clone()もそのままです) が、他のマット (そのクローンなど) は int >= を指す refcount を持っています0.

これの理由は何ですか?

4

1 に答える 1

1

ドキュメントによると

clone()行列のディープ コピーを返します。つまり、データがコピーされます。

したがって、 の増加がないことは理にかなっていrefcountます。このテーマの詳細については、メモリ管理と参照カウントを参照してください

于 2012-11-15T18:29:19.187 に答える