我有一个在应用程序寿命中多次执行的函数。为了优化代码,哪种解决方案更好?
这是:
void foo() {
static const cv::Mat zeroMat16 = cv::Mat::zeros(rows, cols, CV_16UC1);
cv::Mat newMat = zeroMat16.clone();
...
}
比这更快:void foo() {
cv::Mat newMat = cv::Mat::zeros(rows, cols, CV_16UC1);
...
}
还是效率差不多? 最佳答案
clone
在实现中使用不带掩码的copyTo
。
inline Mat Mat::clone() const
{
Mat m;
copyTo(m);
return m;
}
copyTo
implementation-> memcpy
zeros
implementation->
makeExpr
->
MatExpr
然后将其从
MatExpr
转换为Mat
MatExpr::operator Mat()
->
assign
调用
m = Scalar();
Mat::operator=
->
memset
memcpy
is only slighly slower than memset
(1 GB数据约0.2秒),
结果
zeros
略快于 copyTo
。结论:
通过使用
zeros
而不是clone
,关于c++ - cv::Mat::clone()比分配cv::Mat::zeros()创建的矩阵更有效吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64424885/