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
?转换与否,两者都不工作请提供您的代码并解释它是如何工作的。