我知道'copyTo'可以处理 mask 。但是,当不需要口罩时,可以同时使用吗?
http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-clone
最佳答案
实际上,即使没有 mask ,它们的也不会是。
主要区别在于,当目标矩阵和源矩阵具有相同的类型和大小时,copyTo
不会更改目标矩阵的地址,而clone
将始终为目标矩阵分配新地址。
当在copyTo
或clone
之前使用复制分配运算符复制目标矩阵时,这一点很重要。例如,
使用copyTo
:
Mat mat1 = Mat::ones(1, 5, CV_32F);
Mat mat2 = mat1;
Mat mat3 = Mat::zeros(1, 5, CV_32F);
mat3.copyTo(mat1);
cout << mat1 << endl;
cout << mat2 << endl;
输出:
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
使用
clone
:Mat mat1 = Mat::ones(1, 5, CV_32F);
Mat mat2 = mat1;
Mat mat3 = Mat::zeros(1, 5, CV_32F);
mat1 = mat3.clone();
cout << mat1 << endl;
cout << mat2 << endl;
输出:
[0, 0, 0, 0, 0]
[1, 1, 1, 1, 1]
关于opencv - Mat::clone和Mat::copyTo有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15672600/