OpenCV 矩阵运算是不是比简单的循环迭代更快?

Posted

技术标签:

【中文标题】OpenCV 矩阵运算是不是比简单的循环迭代更快?【英文标题】:Are OpenCV matrix operations faster than simple for loop iterations?OpenCV 矩阵运算是否比简单的循环迭代更快? 【发布时间】:2015-06-10 08:58:49 【问题描述】:

我想了解我是否应该更喜欢使用为 OpenCV 的 cv::Mat 类定义的矩阵运算,或者它们的计算时间是否与在双精度数组上使用 for 循环进行迭代相同。

【问题讨论】:

你试过测量吗? 其实我不认为有人知道答案,而无需对其进行测试。到目前为止,我决定自己实现该操作,因为只是向量/矩阵乘法。 预写的矩阵库通常是经过优化的,您将很难达到相同的性能水平。如果本机矩阵运算很好地映射到您想做的工作,那么您完全有理由使用它们。如果他们不这样做,问题是什么? 【参考方案1】:

OpenCV cv::Mat 类使用指针以使它们尽可能高效。话虽如此,如果您想做一个非常具体的操作,您可能会发现自己实施起来更快。

以下是来自 OpenCV 源代码的简单 cv::Mat 转置代码:

void MatOp::transpose(const MatExpr& expr, MatExpr& res) const

Mat m;
expr.op->assign(expr, m);
MatOp_T::makeExpr(res, m, 1);

【讨论】:

这似乎是CUDA代码,它与问题有什么关系? 更改了代码,关键是 OpenCV 已优化,除非您有非常具体的示例

以上是关于OpenCV 矩阵运算是不是比简单的循环迭代更快?的主要内容,如果未能解决你的问题,请参考以下文章

如何提高MATLAB的运算速度

在每次迭代中重新声明变量是不是比在每次迭代后重置它们更快?

递归比循环快吗?

使用迭代变量名在JavaScript for循环中执行简单数学运算

For循环中的三元运算符导致无限迭代

opencv矩阵运算