- OpenCV 4 with Python Blueprints
- Dr. Menua Gevorgyan Arsen Mamikonyan Michael Beyeler
- 247字
- 2021-06-24 16:49:58
Implementing a curve filter using lookup tables
Curve filters are computationally expensive because the values of f(x) must be interpolated whenever x does not coincide with one of the prespecified anchor points. Performing this computation for every pixel of every image frame that we encounter would have dramatic effects on performance.
Instead, we make use of a lookup table. Since there are only 256 possible pixel values for our purposes, we need to calculate f(x) only for all the 256 possible values of x. Interpolation is handled by the UnivariateSpline function of the scipy.interpolate module, as shown in the following code snippet:
from scipy.interpolate import UnivariateSpline def spline_to_lookup_table(spline_breaks: list, break_values: list):
spl = UnivariateSpline(spline_breaks, break_values)
return spl(range(256)
The return argument of the function is a list of 256 elements that contains the interpolated f(x) values for every possible value of x.
All we need to do now is to come up with a set of anchor points, (xi, yi), and we are ready to apply the filter to a grayscale input image (img_gray):
import cv2
import numpy as np x = [0, 128, 255] y = [0, 192, 255] myLUT = spline_to_lookup_table(x, y) img_curved = cv2.LUT(img_gray, myLUT).astype(np.uint8)
The result looks like this (the original image is on the left, and the transformed image is on the right):
In the next section, we'll design the warming and cooling effect. You will also learn how to apply lookup tables to colored images, and how warming and cooling effects work.
- Learn ECMAScript(Second Edition)
- 極簡(jiǎn)算法史:從數(shù)學(xué)到機(jī)器的故事
- 軟件界面交互設(shè)計(jì)基礎(chǔ)
- Python從菜鳥到高手(第2版)
- C語言程序設(shè)計(jì)基礎(chǔ)與實(shí)驗(yàn)指導(dǎo)
- 基于Java技術(shù)的Web應(yīng)用開發(fā)
- Python程序設(shè)計(jì)與算法基礎(chǔ)教程(第2版)(微課版)
- QGIS Python Programming Cookbook(Second Edition)
- Java Web從入門到精通(第3版)
- Machine Learning for Developers
- Machine Learning for OpenCV
- Beginning C# 7 Hands-On:The Core Language
- Software Architecture with Python
- Java 11 and 12:New Features
- Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程