如何在 opencv 中屏蔽浮动垫

How to mask a float mat in opencv

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

A = [0.1 0.2; 0.3 0.4]  
M = [1   0  ; 0   0  ]

我想得到 A&B = [0.1, 0;0 0] 的结果 虽然按位运算不适用于浮动垫。我尝试将掩码转换为 CV_32F 然后像下面这样掩码,也不起作用。

M.convertTo(M, CV_32F);
A.copyTo(A, M);

那么怎么做呢?

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

你应该把结果保存在别处,比如

cv::Mat dst;
A.copyTo(dst, M);  // dst is what you want

我认为这可能有帮助:

//to create mask
cv :: Mat floatMask
cv::threshold( someimage , floatMask , 0 , 1 , cv ::THRESH_BINARY );
floatMask.convertTo( floatMask , cv :: CV_32F);

// now to mask image 
floatImageToBeMasked = floatImageToBeMasked.mul ( floatMask ) ;