官术网_书友最值得收藏!

  • 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.

主站蜘蛛池模板: 仪征市| 炉霍县| 博客| 辰溪县| 天门市| 丰镇市| 怀安县| 连平县| 鹤岗市| 大理市| 含山县| 岳普湖县| 永仁县| 苍南县| 宁远县| 肃宁县| 荥阳市| 家居| 隆安县| 榆中县| 普兰店市| 邛崃市| 安岳县| 双柏县| 清水河县| 多伦县| 库伦旗| 永修县| 新化县| 保康县| 军事| 保山市| 宁陕县| 尼玛县| 内黄县| 济源市| 于都县| 仁怀市| 河源市| 蒙阴县| 五峰|