c++ - OpenCV Mat::ones 函数

标签 c++ opencv

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

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

我希望得到一个 [1,1,1] 的 2x2 矩阵。相反,我得到了这个:

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

这是预期的行为吗?

最佳答案

看起来 Mat::ones() 仅对单 channel 数组按预期工作。对于具有多个 channel 的矩阵,ones() 仅将第一个 channel 设置为 1,而其余 channel 设置为零。

请改用以下构造函数:

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)`

关于c++ - OpenCV Mat::ones 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469734/

相关文章:

c++ - 如何定位变量在堆栈或堆上的位置

c++ - 我可以从同一个文件夹为 mingw 和 windows 构建 boost 吗?

c++ - 在头文件中声明类对象

c++ - 如何在 Android NDK 和 STLport 中使用 boost 库(包括 shared_ptr)

opencv - 为什么在 OpenCV 中没有 MaskPredicate::operator=(const MaskPredicate&) 的定义?

c++ - 将字节数组转换为结构指针取决于字节序或内存对齐方式?

c++ - 如何获取图像的 mask 以便我可以在修复功能中使用它

ios - 获取某人脸部的真实大小

opencv - 在OpenCV中设置矩形样式

opencv - 相关音频opencv