Так что я использую numpy и OpenCV для обработки нескольких видео. Проблема, с которой я сталкиваюсь, заключается в использовании таблицы поиска для точечного преобразования значений пикселей:
def sig(x,factor):
if x == 255:
return 255
elif x!=0:
return int(255*(1- 1/(1+(255/x -1)**(-factor))))
else:
return 0
def Constrast(img):
global LUT
for x in range(len(img)):
for y in range(len(img[0])):
img[x,y] = LUT[img[x,y]]
return img
def Enhance(img):
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#Some other functions here
img = Constrast(img) # This one thing takes 0.3 seconds
#Do more stuff here
factor = .8
LUT = []
for i in range(256):
LUT.append(sig(i,factor))
Enhance(img) # Enhancing a greyscale image
Причина, по которой я использую глобальную переменную, заключается в том, что моя функция контрастности вложена в другие функции. Я протестировал использование LUT
в качестве аргумента этих функций, и оказалось, что он медленнее. Я использовал numpy массивы, словари, массивы из модуля массива и списки, причем последний самый быстрый. До сих пор я управляю 0,3 с на каждом изображении. Есть ли очевидный способ ускорить процесс прохождения пикселов?
Заранее спасибо.