13

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

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

4

3 回答 3

23

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

  img.copyTo(masked, mask)

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

请参阅文档

于 2013-01-30T17:36:40.810 回答
10

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

检查文档。

于 2012-07-10T14:55:30.490 回答
3

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

在 C++ 中:

Mat image, mask;

image = image * mask;
// or 
image = image & mask;
于 2012-07-10T14:56:19.693 回答