在opencv中的白色渐晕

时间:2014-08-25 07:33:37

标签: c++ opencv image-processing

我在openCV中处理晕影过滤器,我尝试了这个问题中的代码(Creating vignette filter in opencv?),它完美无缺。

但是现在我试图修改它以创建一个白色的渐晕滤镜,我找不到一种方法来转动它,以便它显示白色的晕影而不是黑色。

对答案的补充

在修改代码之后,我想为未来的程序员/开发人员或对此问题感兴趣的人明确提出一些观点。

答案中的内容基本上是对像素进行加权加法。使用openCV' AddWeighted可以轻松完成简单的添加。这可用于与任何颜色混合,而不仅仅是黑色或白色。然而,这并不是简单的添加,因为我们没有相同的混合级别,而是渐变给出了混合级别;

伪代码看起来像:

pixel[][] originalImage; //3 channel image
pixel[][] result;        //3 channel image
pixel[][] gradient;      //1 channel image
pixel color;             //pixel for color definition of color to blend with

generateGradient(gradient); //generates the gradient as one channel image
for( x from 0 to originalImage.cols )
{
  for( y from 0 to originalImage.rows )
  {
     pixel blendLevel = gradient[x][y];  
     pixel pixelImage = originalImage[x][y];
     pixel blendcolor = color;
     //this operation is called weighted addition
     //you have to multiply the whole pixel (every channel value of the pixel)
     //by the blendLevel, not just one channel
     result[x][y] = (blendLevel * pixelImage) + ( ( 1 - blendLevel ) * blendColor );
  }
}

1 个答案:

答案 0 :(得分:3)

说,您将颜色fore变暗x。然后,将其与不同颜色back混合,您可以x * fore + (1 - x) * back。我不记得确切的OpenCV语法;看着你的链接,我会写这样的东西:

cv::Mat result = maskImage * img + (1.0 - maskImage) * white;

如果您将图像转换为CIE Lab色彩空间(如插图代码中),这是一个好主意,请不要忘记为白色做同样的事情。