[英]Matrix operations in openCV
由于性能原因,我在最新项目中使用C语言中的OpenCV作为图像处理工具。 使用Open CV时,我发现Open CV对矩阵运算的库支持较少。 例如,如果要向矩阵的每一列添加列向量,则必须编写一个自定义函数来执行此操作。 在Matlab中还有很多看似微不足道的操作,在Open CV中缺少类似每列的规范,列明智的最小/最大值等。简而言之,在Open CV中似乎缺少矩阵上所有列明智的操作(我会感到惊讶如果找不到更多内容)。对库的矩阵处理支持非常少。 这是库的设计决定,还是某种扩展可以帮助我完成此任务。 我相信一定会有其他人观察到缺乏支持的情况并有所作为。
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);
}
列明智的最小/最大等
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()
也执行求和和平均值。 您可以选择按列或按行执行。 如果这些操作不足以满足您的需要,则实际上您可能必须编写自己的函数。
联机文档非常好:
本教程提供了有关内存管理和矩阵的更多信息,特别是说明了范围以及如何共享内存:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.