DEV Community

Cover image for Creating more filters with OpenCV and Python
Ethan
Ethan

Posted on

6

Creating more filters with OpenCV and Python

Introduction

Hello! 😀

In this tutorial I will be showcasing some more filters using OpenCV and Python!
This is a continuation of my previous example which can be found here:
https://dev.to/ethand91/creating-various-filters-with-opencvpython-3077

I've already discussed how to create the virtual environment in previous tutorials so I will skip that part.

Well lets get started creating some more filters! 🥳


Vignette Filter

First we will create the vignette filter. The vignette filter is achieved by creating a broad 2D Gaussian kernel.

def vignette(image, level = 2): 
    height, width = image.shape[:2]

    x_resultant_kernel = cv2.getGaussianKernel(width, width/level)
    y_resultant_kernel = cv2.getGaussianKernel(height, height/level)

    kernel = y_resultant_kernel * x_resultant_kernel.T
    mask = kernel / kernel.max()

    image_vignette = np.copy(image)

    for i in range(3):
        image_vignette[:,:,i] = image_vignette[:,:,i] * mask

    return image_vignette
Enter fullscreen mode Exit fullscreen mode

Here we generate the vignette mask using Gaussian kernels, we then generate the result matrix and then apply the mask to each of the image's color channels.

Vignette Filter


Embossed Filter

The next filter is the embossed filter:

def embossed_edges(image):

    kernel = np.array([[0, -3, -3], [3, 0, -3], [3, 3, 0]])

    image_emboss = cv2.filter2D(image, -1, kernel = kernel)

    return image_emboss
Enter fullscreen mode Exit fullscreen mode

Here we create an array for each of the channels and then apply it to the image via filter2D.

Embossed Filter


Outline Filter

The next filter is the outline filter:

def outline(image, k = 9): 
    k = max(k, 9)
    kernel = np.array([[-1, -1, -1], [-1, k, -1], [-1, -1, -1]])

    image_outline = cv2.filter2D(image, ddepth = -1, kernel = kernel)

    return image_outline
Enter fullscreen mode Exit fullscreen mode

Similar to the embossed filter but this time we increase the quality of the outlines.

Outline Filter


Style Filter

The final filter is one of my personal favorites, the style filter.

def style(image):
    image_blur = cv2.GaussianBlur(image, (5, 5), 0, 0)
    image_style = cv2.stylization(image_blur, sigma_s = 40, sigma_r = 0.1)

    return image_style
Enter fullscreen mode Exit fullscreen mode

This filter is really cool IMO.
Before calling stylization it's best to blur the image a bit for better results.

Style Filter


Conclusion

Here I have shown how to create more various filters with opencv/python. I hope this tutorial was useful to you.

If you have any cool filters please share them. 😎

The source code and the original image can be found via:
https://github.com/ethand91/python-opencv-filters


Like me work? I post about a variety of topics, if you would like to see more please like and follow me.
Also I love coffee.

“Buy Me A Coffee”

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (2)

Collapse
 
roshanabdullah profile image
Abdullah Roshan

Interesting. Very informative!

Collapse
 
ethand91 profile image
Ethan

Thank you :)

Cloudinary image

Optimize, customize, deliver, manage and analyze your images.

Remove background in all your web images at the same time, use outpainting to expand images with matching content, remove objects via open-set object detection and fill, recolor, crop, resize... Discover these and hundreds more ways to manage your web images and videos on a scale.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay