2013-08-27 80 views
9

根據文檔,該函數應返回一個Mat,其中所有元素均爲1。OpenCV Mat :: ones函數

Mat m = Mat::ones(2, 2, CV_8UC3); 

我期待得到一個2×2矩陣[1,1,1]。相反,我得到這個:

[1, 0, 0] [1, 0, 0] 
[1, 0, 0] [1, 0, 0] 

這是預期的行爲?

回答

10

它看起來像Mat::ones()只適用於單通道陣列。對於具有多個通道的矩陣,ones()只將第一個通道設置爲1,而其餘通道設置爲零。

使用下面的構造來代替:

Mat m = Mat(2, 2, CV_8UC3, Scalar(1,1,1)); 
std::cout << m; 

編輯。調用

Mat m = Mat::ones(2, 2, CV_8UC3); 

是與調用

Mat m = Mat(2, 2, CV_8UC3, 1); // OpenCV replaces `1` with `Scalar(1,0,0)` 
+0

這是偉大的,謝謝。在我的情況下,我不得不使用標量(255,255,255)(對於CV_8UC4類型) –