A második példaprogramban az OpenCV keresőtábla (look-up table, LUT) funkcióját ismerhetjük meg. A lényege, hogy készítünk egy 256 elemű, előjel nélküli egész típusú tömböt, és minden indexhez megadjuk az index, mint képpont intenzitásérték új értékét. Ezután a cv2.LUT() fügvénnyel a megadott képre alkalmazhatjuk a keresőtáblában definiált cserét. Ennek első paramétere a módosítandó képmátrix, a második pedig a cserét leíró tömb. Ha többcsatornás kép a bement, akkor minden csatornára külön elvégzi a cserét, vagyis színes és szürkeárnyalatosra is működik.

import cv2
import numpy as np
im = cv2.imread('Sudoku_h.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Eredeti', im)
# Inverz készítés keresőtáblával
lut = np.arange(0, 256, 1, np.uint8)
lut = 255 - lut
im_inv = cv2.LUT(im, lut)
cv2.imshow('Inverz LUT', im_inv)
cv2.waitKey(0)
A NumPy arange(start, stop, step, dtype) függvénye egy tömböt hoz létre [start, stop) értékkészlettel (vagyis a stop már nem lesz eleme), step növekménnyel, dtype típusú elemekkel.
Vegyük észre, hogy a kivonást most nem a képmátrixra, hanem a (jellemzően) jóval kisebb méretű tömb elemeire hajtjuk végre, majd a cv2.LUT() végzi el a cserét.
Időigény szempontjából ennyire egyszerű aritmetikai művelet esetén nem feltétlenül van érzékelhető sebeségnövekedés, de egy minden képpontra végrehajtott osztás, szorzás, logaritmus művelet nem mindegy, hogy 256 vagy több millió esetben számolódjon ki. A keresőtábla-alapú csere időigénye ettől függetlenül állandó. A világosság-kontraszt állítás esetén például a keresőtáblás megközelítés kb. 40-szeres gyorsulást jelent a Numpy aritmetikával minden képpontra végrehajtotthoz képest, a for ciklussal bejárt képmátrixhoz képest pedig 15000-szeres (tizenötezerszeres).