1

我想深拷贝一张图片。哪个性能更好?

cv::Mat new_img(old_img, true);

(第一个不完全正确,请检查我的答案)或

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

(我问它是因为第二个对我来说更有吸引力,但我不确定我的情况有多糟糕。也许我什至会定义一个常数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);

我和锤子看到的是:

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();

在对小图像进行分析之后:正如 Hammer 所说,没有区别。他们没有克隆 copyCtor 的原因是返回值优化(参见维基百科)。

于 2012-11-06T15:28:38.550 回答