如何在OpenCV中"zero"图像的遮罩部分中的所有内容

How to "zero" everything within a masked part of an image in OpenCV

本文关键字:罩部 图像 OpenCV zero      更新时间:2023-10-16

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

换句话说,任何"在遮罩区域内"的东西都将保持其原始值,遮罩区域外的任何东西都将变为零。

最简单的方法,使用"Mat img"(要屏蔽的图像,输入)和"Mat masked"(屏蔽图像,输出):

  img.copyTo(masked, mask)

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

请参阅文档。

您可以简单地使用bitwise_and()函数。

查看文档。

将图像相乘或位和掩码。有一些OpenCV函数用于此,但我不知道它们在C接口中的名称。

在C++中:

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