Creating a vignette filter
Using all the information we have, let's see if we can create a nice vignette filter. The output will look something like the following:
![](https://static.packt-cdn.com/products/9781788396905/graphics/b0d921f9-51e2-4ec9-9fd8-f93c78bdaf34.png)
Here is the code to achieve this effect:
import cv2 import numpy as np img = cv2.imread('images/input.jpg') rows, cols = img.shape[:2] # generating vignette mask using Gaussian kernels kernel_x = cv2.getGaussianKernel(cols,200) kernel_y = cv2.getGaussianKernel(rows,200) kernel = kernel_y * kernel_x.T mask = 255 * kernel / np.linalg.norm(kernel) output = np.copy(img) # applying the mask to each channel in the input image for i in range(3): output[:,:,i] = output[:,:,i] * mask cv2.imshow('Original', img) cv2.imshow('Vignette', output) cv2.waitKey(0)
What's happening underneath?
The vignette filter basically focuses the brightness on a particular part of the image and the other parts look faded. In order to achieve this, we need to filter out each channel in the image using a Gaussian kernel. OpenCV provides...