如何在OpenCV中将图像的蒙版部分中的所有内容“归零”

时间:2012-07-10 14:52:37

标签: c++ opencv mask

如果我有一个图像(IplImage 8位)和二进制掩码(也是一个相同大小的8位IplImage,其中每个像素的值都是0或255),我怎么能做到每一个与掩码中具有零值的像素对应的图像中的像素具有零值,并且图像中与掩模中具有任何其他值(即255)的像素相对应的每个像素具有与在原始图像?

换句话说,“掩码区域”中的任何内容都将保持其原始值,并且掩码区域之外的任何内容都将变为零。

3 个答案:

答案 0 :(得分:19)

最简单的方法,使用'Mat img'(要遮罩的图像,输入)和'遮罩遮罩'(遮罩图像,输出):

  img.copyTo(masked, mask)

其中“Mat mask”是一个不一定是二进制的矩阵(copyTo认为元素值为零)。蒙面可以是任何尺寸和类型;如果需要,它会重新分配。

请参阅doc

答案 1 :(得分:7)

您只需使用bitwise_and()功能。

Check the documentation.

答案 2 :(得分:2)

与图像相乘或位 - 以及掩码。有一些OpenCV函数,但我不知道它们的C接口名称。

在C ++中:

Mat image, mask;

image = image * mask;
// or 
image = image & mask;