如何在 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 ) ;
我有一个 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 ) ;