簡體   English   中英

openCV中的矩陣運算

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM