我想深拷贝一张图片。哪个性能更好?
cv::Mat new_img(old_img, true);
(第一个不完全正确,请检查我的答案)或
cv::Mat new_img = old_img.clone();
(我问它是因为第二个对我来说更有吸引力,但我不确定我的情况有多糟糕。也许我什至会定义一个常数CV_CLONE = true
......以防第一个更好。 )
通过查看源代码,您可以准确地了解每个功能的作用。构造函数是 00172,克隆是 00346。两者都调用相同的内部函数 copyTo,所以我想它们在性能方面基本相同。
我已经开始进行基准测试,然后……等等!没有这样的事情
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 的原因是返回值优化(参见维基百科)。