2013-05-25 85 views
0

我乘以它的轉置矩陣,我得到一個零矩陣。矩陣乘以它的轉置返回零矩陣?

我乘以其他矩陣,沒有任何問題。我試過這兩個與cvMulcvMulTransposed並始終得到一個零矩陣,這是不同於預期的結果。

代碼:

CvMat *test = cvCreateMat(3, 3, CV_64F); 
    CvMat *test2 = cvCreateMat(3, 3, CV_64F); 
    for(NSInteger row = 0; row < 3; row++) { 
    for (NSInteger column = 0; column < 3; column++) { 
     double value = 0.0f; 
     if (row == column) { 
     switch(row+column) { 
      case 0: 
      value = 16.815826; 
      break; 
      case 2: 
      value = 1.492630; 
      break; 
     } 
     } 
     cvSetReal2D(test, row, column, value); 
     cvSetReal2D(test2, row, column, value); 
    } 
    } 

    [self printCvMat:test]; 
    [self printCvMat:test2]; 

    CvMat *testResult = cvCreateMat(test->rows, test2->cols, CV_64F); 
    cvMul(test, test2, testResult, 0.0f); 
    [self printCvMat:testResult]; 

輸出:

Printing Matrix: 
16.815826 0.000000 0.000000 
0.000000 1.492630 0.000000 
0.000000 0.000000 0.000000 
Printing Matrix: 
16.815826 0.000000 0.000000 
0.000000 1.492630 0.000000 
0.000000 0.000000 0.000000 
Printing Matrix: 
0.000000 0.000000 0.000000 
0.000000 0.000000 0.000000 
0.000000 0.000000 0.000000 

它應該是:

282.772 0.000 0.000 
    0.000 2.228 0.000 
    0.000 0.000 0.000 
+0

我從來沒有遇到過這個錯誤,但是這可能會有所幫助,因爲你還沒有提到你的openCV版本:http://tech.groups.yahoo.com/group/OpenCV/message/6750 –

回答

4

documentation

功能multiply計算兩個數組的每個元素的產品:

DST(I)=飽和(規模•SRC1(I)•SRC2(I))

你傳遞0爲規模。

+0

嗯,你猜這是很明顯。對我感到羞恥。謝謝! – dwbrito

+0

或者,也可以這樣:) +1 –