我想要深度复制图像。哪种性能更好?
cv::Mat new_img(old_img, true);
(这第一个不完全正确,请检查我的答案) 或
cv::Mat new_img = old_img.clone();
(我问它,因为第二个对我来说更具吸引力,但是我不确定我的情况有多糟糕。也许我甚至会定义一个常数CV_CLONE = true
......如果第一个更好。)
答案 0 :(得分:4)
通过查看source code,您可以确切了解每项操作的效果。构造函数是00172,clone是00346.两者都调用相同的内部函数copyTo,所以我认为它们在性能方面基本相同。
答案 1 :(得分: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的原因是返回值优化(参见维基百科)。