出于性能原因,我在C中使用OpenCV作为我最新项目中的图像处理工具。在使用Open CV时,我发现Open CV对矩阵操作的库支持较少。例如,如果想要向矩阵中的每一列添加列向量,我将不得不编写一个自定义函数来执行此操作。在Matlab中有许多操作看起来微不足道,在Open CV中缺失 - 比如每列的范数,列式min / max等。简而言之,在CV中,矩阵上的所有列式操作似乎都缺失(我会感到惊讶)如果我没有找到更多)。对库的矩阵操作支持非常小。这是图书馆的设计决定还是有某种扩展可以帮助我完成这个任务。我相信一定有其他人观察并做了一些关于缺乏支持的事情。有什么指针?
答案 0 :(得分:2)
OpenCV可能不是MatLab的完全替代品,但它的矩阵支持仍然相当不错。您可能会发现您正在寻找的某些功能存在,但只是名称不同。
例如,如果想要向矩阵中的每一列添加列向量,我将不得不编写一个自定义函数来执行此操作。
你可以通过几种方式做到这一点;可能最简单的是范围。请参阅下面的一个解决方案。
像每列的标准
使用矩阵范围选择循环中的每一列:
cv::Mat m;
// ...
for (unsigned c = 0; c < m.cols(); c++)
{
cv::Mat col(m, cv::Range::all(), cv::Range(c, c+1));
double n = cv::norm(col, NORM_L2);
}
列式min / max等
cv::reduce
功能提供了所有这些功能:
cv::reduce(InputArray src, OutputArray dst, int dim, int rtype);
// where rtype = CV_REDUCE_MIN, CV_REDUCE_MAX, etc
简而言之,对于矩阵的所有列式操作似乎都在Open CV中缺失(如果我没有找到更多,我会感到惊讶)。
cv::reduce()
也执行总和和平均值。您可以选择按列或按行执行。如果这些操作不能满足您的需求,您实际上可能需要编写自己的函数。
在线文档相当不错:
本教程提供了有关内存管理和矩阵的更多信息,特别是解释了范围以及它如何共享内存: