深度复制cv :: Mat替代品,哪个更好?

时间:2012-11-01 22:18:07

标签: c++ opencv

我想要深度复制图像。哪种性能更好?

cv::Mat new_img(old_img, true);

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

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

(我问它,因为第二个对我来说更具吸引力,但是我不确定我的情况有多糟糕。也许我甚至会定义一个常数CV_CLONE = true ......如果第一个更好。)

2 个答案:

答案 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的原因是返回值优化(参见维基百科)。

相关问题