如何在opencv中遮盖浮垫

Fra*_*zer 7 c++ opencv mask mat

我有一个类型为 A 的垫子CV_32F和一个二进制值为 0 和 255 的掩码M。例如,

A = [0.1 0.2; 0.3 0.4]  
M = [1   0  ; 0   0  ]
Run Code Online (Sandbox Code Playgroud)

我想得到A&B = [0.1, 0;0 0] 虽然按位运算在浮动垫上不起作用的结果。我尝试将蒙版转换为CV_32F然后蒙版,如下所示,也不起作用。

M.convertTo(M, CV_32F);
A.copyTo(A, M);
Run Code Online (Sandbox Code Playgroud)

那么怎么办呢?

her*_*tao 4

您的代码不起作用,因为正如文档所述Mat::copyTo该函数不处理源矩阵和目标矩阵之间部分重叠的情况,而源矩阵和目标矩阵在您的情况下是相同的。

您应该将结果保存在其他地方,例如

cv::Mat dst;
A.copyTo(dst, M);  // dst is what you want
Run Code Online (Sandbox Code Playgroud)