C++ 如何在opencv中屏蔽浮动垫

C++ 如何在opencv中屏蔽浮动垫,c++,opencv,mask,mat,C++,Opencv,Mask,Mat,我有一个类型为CV_32F的mat 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); 那么怎么做呢?您的代码不起作用,因为正如的文档所说,函数不处理源矩阵和目标矩阵之间部分重叠的情况,而

我有一个类型为
CV_32F
的mat 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);

那么怎么做呢?

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

您应该将结果保存到其他位置,如

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

为什么需要将掩码转换为
CV_32F
?转换与否,两者都不工作请提供您的代码并解释它是如何工作的。