问题 OpenCV Mat :: ones函数


根据文档,这个函数应该返回一个 Mat 所有元素都作为一个。

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

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

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

这是预期的行为吗?


8856
2017-08-27 15:29


起源



答案:


看起来像 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)`

12
2017-08-27 15:49



那太好了,谢谢。在我的情况下,我不得不做Scalar(255,255,255)(对于CV_8UC4类型) - Ege Akpinar


答案:


看起来像 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)`

12
2017-08-27 15:49



那太好了,谢谢。在我的情况下,我不得不做Scalar(255,255,255)(对于CV_8UC4类型) - Ege Akpinar