出于性能原因,我在C中使用OpenCV作为图像处理工具。在使用Open CV时,我发现Open CV对矩阵操作的库支持较少。例如,如果想要将列向量添加到矩阵中的每一列,我将不得不编写一个自定义函数来执行此操作。还有更多的操作在Matlab中看起来微不足道,在Open CV中缺失 - 像每列的规范,列明智的最小/最大等等。简而言之,矩阵中的所有列操作似乎都在Open CV中缺失(我会感到惊讶如果我没有找到更多)。图书馆的矩阵操纵支持是非常小的。这是一个图书馆的设计决定,还是有某种扩展可以帮助我完成这个任务。我相信肯定还有其他人对缺乏支持进行了观察和处理。任何指针?openCV中的矩阵操作
1
A
回答
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);
}
逐列的最小/最大等
cv::reduce
函数提供了所有这些功能:
cv::reduce(InputArray src, OutputArray dst, int dim, int rtype);
// where rtype = CV_REDUCE_MIN, CV_REDUCE_MAX, etc
在一个矩阵总之一切逐列操作似乎打开CV失踪(我会感到惊讶,如果我没有找到更多)。
cv::reduce()
也执行总和和平均值。您可以选择按列或按行执行。如果这些操作不足以满足您的需求,您可能需要编写自己的功能。
在线文档是相当不错的:
本教程对内存管理和矩阵更多的信息,尤其是解释有关范围和如何可以共享内存:
相关问题
- 1. 每元素操作的Opencv矩阵
- 2. 矩阵操作?
- 3. MATLAB中的矩阵操作
- 4. Java中的矩阵操作
- 5. MatLab中的矩阵操作
- 6. CUDA中的矩阵操作
- 7. 矩阵行操作
- 8. Matlab矩阵操作
- 9. 矩阵操作SciLab
- 10. Python矩阵操作
- 11. 在fortran中操作矩阵
- 12. 操作数和操作符的矩阵
- 13. OpenCV的垫每个元素的操作:向量矩阵乘法
- 14. OpenCV中的Homography矩阵
- 15. Android中的Homography矩阵opencv
- 16. OpenCV中的排序矩阵
- 17. MySQL的矩阵操作
- 18. 矩阵的Python exp操作
- 19. 在OpenCV中使用子矩阵制作一个大矩阵
- 20. 在OpenCV中的矩形矩阵计算
- 21. 作为矩阵的矩阵单通道Opencv
- 22. python中的条件矩阵操作
- 23. sympy中的矩阵操作错误
- 24. Octave .oct文件中的矩阵操作
- 25. R中的行明智矩阵操作
- 26. c#中的高速矩阵操作?
- 27. Google脚本中的矩阵操作
- 28. Mirror.js中的矩阵操作(三个j)
- 29. Scala火花矩阵操作
- 30. 加速矩阵rowMeans操作
我在C编写代码,而不是C++,这样我就可以移植到嵌入式平台。你有指向C文档的指针吗?你的答案仍然给我一个想法如何解决这个问题。谢谢 – Malice
C API对应于OpenCV 1.x,而2.x是向C++的迁移。一些API仍然存在于C语言中,所以通常你可以把命名空间和函数名连接起来,所以(例如)使用'cv :: reduce',给出'cvReduce'。但总的来说,C++(或Python)是一条可行的路线,文档将列出上述参考文献中支持的所有绑定。您定位的是哪个平台?无论如何,大多数人都有C++支持。 – gavinb
@Malice如果你坚持使用旧版API,你实际上没有权利抱怨缺乏功能。转到http://docs.opencv.org/modules/core/doc/old_basic_structures.html,然后在索引中查找C函数。当然,使用C++的OpenCV可以移植到许多嵌入式平台上,这是你不能用Matlab获得的功能。 – Bull