2014-02-19 519 views
16

我需要對矩陣中的所有元素進行求和。我使用的功能OpenCV中矩陣元素的總和?

sum(sum(A)); 

in matlab。其中A是大小爲300 * 360的矩陣。 我想在OpenCV中實現相同的功能。我用過這樣的東西。

double s=cv::sum(cv::sum(A)); 

但有錯誤顯示無法將標量轉換爲雙倍。如何解決這個問題?

+7

正如順便說一句,在Matlab最好是'總和(A(:))'代替'總和(總和(A))[OpenCV中的' – bla

+0

可能重複:獲取總墊值的](http://stackoverflow.com/questions/10156044/opencv-getting-the-total-of-mat-values) – m0nhawk

回答

33

與Matlab不同,在opencv中,cv::sum(A)沿所有維度求和並返回一個等於Matlab的sum(sum(A))的單個數字(標量)。
所以,你需要的是

double s = cv::sum(A)[0]; 
+7

不完全正確:'cv :: Scalar s = cv :: sum(A);'if這是一個1chan墊,它是:'double psum = cv :: sum(A)[0];' – berak

+0

[0]代表什麼意思。誰能解釋一下? – kadu

+14

'cv :: sum'返回'cv :: Scalar'元素。例如,如果您有3通道圖像,則返回值有3個元素,每個通道一個。所以每個頻道都是獨立總結的。 '[0]'將訪問該標量的第一個值。對於BGR排序的RGB圖像(大部分用於OpenCV),Scalar的'[0]'將訪問總和的「藍色通道」,'[1]'將是「綠色通道」和「 2]'是該例子中「紅色通道」的總和。 http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#sum – Micka

8

除了與@Shai即可使用;

double sum = cv::sum(A).val(0);