16

根据文档,此函数应返回 aMat所有元素为一个。

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

我期待得到一个 2x2 矩阵[1,1,1]。相反,我得到了这个:

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

这是预期的行为吗?

4

1 回答 1

19

它看起来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)`
于 2013-08-27T15:49:05.663 回答