当我使用openCV时 void Mat :: copyTo(OutputArray m,InputArray mask) 函数,新分配的矩阵在复制数据之前用全零初始化。有没有办法用255而不是零来初始化?
答案 0 :(得分:6)
请参阅OpenCV Doc了解Mat
您可以使用像
这样的内容创建Mat三个频道
Mat M(cols,rows, CV_8UC3, Scalar::all(255));
单渠道
Mat M(cols,rows, CV_8UC1, Scalar(255));
答案 1 :(得分:4)
您只需在将数据复制到输出矩阵之前分配输出矩阵。您可以创建一个使用常量初始化的矩阵,如下所示Mat A(3,3,CV_32F, Scalar(255))
。或者,如果您有预先声明的矩阵A
,则可以使用A.create(3,3,CV_32F)
重新分配它,然后使用A = Scalar(255)
使用常量对其进行初始化。
因此,在您的情况下,您可以执行以下操作:
// Create output matrix initialized with a constant
Mat output(rows, cols, CV_8UC3, Scalar(255,255,255));
// Copy your `input` matrix into `output` through your `mask`
input.copyTo(output, mask);