mishan
mishan

Reputation: 1217

Vignettation with white color in opencv

im working on a vignette filter in openCV and i tried the code in this question ( Creating vignette filter in opencv? ), and it works perfectly.

But now I'm trying to modify it to create a white vignetting filter and I can't find a way to turn it so that it shows white color vignette instead of black.

ADDITIONALY TO ANSWER

After modifying the code there are some points I'd like to make clear for any future programmers/developers or people interested in the problem.

What is said in the answer is basically to do a weighted addition of pixels. Simple addition can be easily done using openCV's AddWeighted. This can be use to do blending with any color, not just black or white. However this is not simple addition since we do not have the same blending level everyuwhere, but instead level of blending is given by the gradient;

pseudocode looks like:

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 );
  }
}

Upvotes: 0

Views: 409

Answers (1)

Don Reba
Don Reba

Reputation: 14031

Say, you darken your colour fore by a factor of x. Then to blend it with a different colour back, you take x * fore + (1 - x) * back. I don't remember the exact OpenCV syntax; looking at your link, I would write something like this:

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

If you convert your image to the CIE Lab colour space (as in the vignette code), which would be a good idea, don't forget to do the same for white.

Upvotes: 3

Related Questions