如何在 OpenCV 中的图像上应用非二进制掩码?

How to apply a non-binary mask on an image in OpenCV?

我正在使用 OpenCV,我有一张灰度图像,它是对二进制掩码进行平滑操作的结果:

我想将此蒙版应用于给定的 RGB 图像,但使用带有蒙版选项的 copyTo 方法会考虑蒙版的所有非零像素。然而,我感兴趣的是获得一个输出图像,其 RGB 像素值是输入值 'scaled' 像素级由灰度掩码给出的因子。

我觉得这可以通过使用 OpenCV 的内置函数来实现,但到目前为止我找不到任何方法来做我想做的事情。

我知道如何以蛮力方式从头开始,但我更愿意——如果可能的话——使用内置函数。

提前致谢!

正如@api55 所指出的,我的问题的解决方案是:

  1. 通过函数cv::normalize
  2. 归一化mask
  3. 通过函数cv::multiply
  4. 将归一化掩码与输入图像相乘

特别是归一化掩码的类型必须设置为CV_32F(否则将不起作用)。因此,输入图像也必须进行转换(例如,使用 convertTo)。

示例代码:

cv::normalize(mask,mask,0.,1.,cv::NORM_MINMAX,CV_32F);
image.convertTo(image,CV_32F);
cv::multiply(image,mask,image);
image.convertTo(image,CV_8U); // Convert back the input image to the original type