1

画像をディープコピーしたい。性能的にはどっちがいい?

cv::Mat new_img(old_img, true);

(この最初のものは完全に正しいわけではありません。私の答えを確認してください)または

cv::Mat new_img = old_img.clone();

(私は 2 番目のほうが要点がはっきりしているという点で私にとってより魅力的であるため、質問していますが、私がどれだけ悪いかはわかりません。CV_CLONE = true最初のものが優れている場合に備えて、定数を定義することさえあるかもしれません。 )

4

2 に答える 2

4

ソースコードを見ると、それぞれが何をするかを正確に知ることができます。コンストラクターは 00172、クローンは 00346 です。どちらも同じ内部関数 copyTo を呼び出すため、パフォーマンスの点では本質的に同じであると思います。

于 2012-11-01T22:28:03.383 に答える
0

ベンチマークを開始しました...ちょっと待ってください! なんてことはありません

cv::Mat(const cv::Mat& from, bool deep_copy=false);

Hammer と私が見たものは次のとおりです。

cv::Mat(const CvMat* from, bool deep_copy=false);

奇妙な...

したがって、正しい解決策は

CvMat temp = img;   
cv::Mat img_clone = cv::Mat(&temp, true);  
// vs  
img_clone = img.clone();

小さな画像でプロファイリングした後:ハンマーが言ったように違いはありません。copyCtor の複製がない理由は、戻り値の最適化です (wikipedia を参照)。

于 2012-11-06T15:28:38.550 に答える