Как ускорить мою прогу python - PullRequest
0 голосов
/ 05 июня 2018
def dehaze(img, light_intensity, windowSize, t0, w,s1,s2,siz,size1,dark_channel):        
    global outimg
    for y in range(s1,siz):
        for x in range(s2,size1):
            t = 1.0 - (w * img.item(y, x, dark_channel) / light_intensity)
            outimg.itemset((y,x,0), max(0, min(((img.item(y,x,0) - light_intensity) / max(t, t0) + light_intensity), 255)))
            outimg.itemset((y,x,1), max(0, min(((img.item(y,x,1) - light_intensity) / max(t, t0) + light_intensity), 255)))
            outimg.itemset((y,x,2), max(0, min(((img.item(y,x,2) - light_intensity) / max(t, t0) + light_intensity), 255)))

Я реализовал программу на Python, я хочу обрабатывать видео в реальном времени.Но вышеупомянутая функция занимает 1,5 секунды для обработки одного кадра.Может ли кто-нибудь помочь мне, как я могу получить результат моего желания?Я буду благодарен, если кто-то может мне помочь.

1 Ответ

0 голосов
/ 05 июня 2018

Мой первый ответ: «Не используйте Python».Согласно официальной документации

По сравнению с синтаксисом индексации, набор элементов обеспечивает некоторое увеличение скорости для размещения скаляра в определенном месте в ndarray, если вы должны это сделать.Однако, как правило, это не рекомендуется: среди прочих проблем это усложняет внешний вид кода.Кроме того, при использовании itemset (и item) внутри цикла, обязательно назначайте методы локальной переменной, чтобы избежать поиска атрибутов на каждой итерации цикла.

Поэтому вы можете по крайней мереесть что-то вроде этого:

itemset = outimg.itemset
for ...
    itemset(...)

По крайней мере, вы ускорите поиск атрибутов.То же самое верно для img.item.С другой стороны, вам не нужно вычислять 3 раза max(t, t0), поэтому вы также можете сохранить его в переменной.

Одно замечание: нужно ли иметь глобальную переменную?

...