我在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 );
}
}
答案 0 :(得分:3)
说,您将颜色fore
变暗x
。然后,将其与不同颜色back
混合,您可以x * fore + (1 - x) * back
。我不记得确切的OpenCV语法;看着你的链接,我会写这样的东西:
cv::Mat result = maskImage * img + (1.0 - maskImage) * white;
如果您将图像转换为CIE Lab色彩空间(如插图代码中),这是一个好主意,请不要忘记为白色做同样的事情。