Какой самый быстрый способ получить доступ к пиксельным данным фотографии? - PullRequest
0 голосов
/ 21 февраля 2020

Я работаю над программой компьютерного зрения и пытаюсь создать фоновое изображение, принимая медианное значение каждого пикселя на протяжении видео. Для этого я конвертирую каждый видеокадр из RGB в оттенки серого, а также конвертирую данные в int32. Как только я сделаю это, я хочу прочитать значение серого каждого пикселя и добавить 1 в ячейку гистограммы (каждому пикселю назначена своя гистограмма).

Это должно быть простой задачей, однако принимает wayyyyyy долго. Когда я смотрю на время для каждого шага, я вижу, что преобразования имеют порядок .01 se c, но чтение данных по всем пикселям имеет порядок 1 se c.

Поскольку преобразование серой шкалы, по сути, делает больше провалов, чем просто чтение данных для каждого пикселя и требует меньше времени для этого, я знаю, что должен быть лучший способ сделать это. Я пытался многопоточность процесса и не видел ускорения между 2 потоками и 4 потоками, поэтому я не думаю, что это поможет.

backgroundImg=[[[0 for col in range(64)]
                    for col in range(1920)]
                        for row in range(1080)]
while(True)
    ret,frame=cam.read()
    if ret:
        frame=Image.fromarray(frame).convert('LA')
        frame=np.int32(frame)
        for line in range(0,1080):
            for col in range(0,1920):
                backgroundImage[line][col][frame[line][col][0]]+=1

Это пример моего кода. После вычисления фонового изображения мне нужно будет вычесть это из каждого кадра и запустить алгоритм, чтобы найти все подключенные пиксели.

...