Comments 18
Похожая техника, очень необычный результат.
Странно что цветовые каналы выщелкнуло в переполнение.
Вообще говоря cv тут нафик не нужна, это и в контексте numpy отлично сработает:
result = (img1*0.5 + img2*0.5)
result_clipped = np.clip(result, 0, 255).astype(np.uint8)
Причем я бы кастанул в грейскейл и это сработает даже со стэком n изображений в тензорной форме, например положим что img_stack.shape == (n, 1, y, x) типа np.uint8
то можно дать:
result = np.sum(img_stack.astype(int), axis = 0) / n
Странно что цветовые каналы выщелкнуло в переполнение.
Я, возможно, чего-то не догоняю, конкретно, что автор делает вот в этих вот двух строчках:
dst = glue(img1,img2)
dst+=dst
Сперва в dst кладётся среднее арифметическое двух соседних по времени кадров (ОК), потом содержимое dst удваивается путём сложения самого с собой - видимо, тут и возникает переполнение, ибо как ему тут не возникнуть. Затем цикл уходит на следующую итерацию и значение dst затирается средним двух следующих кадров? Т. е., после завершения цикла пишется удвоенное среднее двух последних, а все предыдущие итерации были мартышкиным трудом?
@xpbim3_xpbim3
| Вообще говоря cv тут нафик не нужна, это и в контексте numpy отлично сработает:
не нужна, если просто сложением заниматься и не делать снимки с камеры. но их приходится делать.
да и результат, не отличается от того, что предложил SquareRootOfZero -

мне кажется можно воспользоваться контролем времени затухания "люминофора" которого нет
то есть например второй кадр суммируется с первым, у которого понижена яркость например на 25%, третий из 1-2-3 кадров так же -25% и -50%. Таким образом яркие участки будут уходить в белое, а "моргающие" точки в серое.
А если не суммировать, а взять максимум яркости от двух соседних кадров?
каким образом ?
Методом попиксельного сложения соседних кадров (с арифметикой насыщения). Если удасться сделать с компенсацией движения, то ещё лучше. Хотя в сферическом случае через-кадрового пропадания светящейся надписи и без компенсации станет лучше.
я не совсем вас понимаю. в коде можете продемонстрировать ?
Извиняюсь - чего то меня заклилнило, не то написал. Не "попиксельное сложение", а попиксельный максимум из двух соседних кадров.
Попиксельный максимум двух соседних кадров будет в коде как-то так:
import cv2
# two consecutive frames as grayscale
img1 = cv2.imread("frame1.jpg", cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread("frame2.jpg", cv2.IMREAD_GRAYSCALE)
cond = img2 > img1 # condition where img2 pixel value is greater
img1[cond] = img2[cond] # replace img1 pixel with img2 pixel
cv2.imwrite("maxvalue.jpg", img1)
Проверить эффект я не смог - не на чем, в видео каждый второй кадр содержит весь номер целиком и ярко, ну, выбрал максимум, ну и чо. Плюс кадры часто сильно смещаются друг относительно друга, а решение проблемы стабилизации автором поста не заявлено. Но на стабильном мерцающем наборе чо б ему не работать. Если цвет цифр всегда один и тот же, можно ещё вместо яркости попробовать брать максимум по hue, наверное.
Два вопроса:
Идея со средневзвешенной яркостью понятна, но какую задачу автор решает, складывая получившуюся картинку саму с собой, по-сути, удваивая яркость (и, за счёт переполнения цветовых каналов, собственно, и получая свои "необычные" снимки)?
Чоза дичь происходит в финальном цикле?
Если распатронить ролик с ютуба на кадры, то там как минимум на каждом втором кадре номер автобуса присутствует целиком, ярко и чётко - это результат сжатия видео или изначально камера так сняла? А то, может, и огород городить не стоило?
При сложении снимков получается снимок, на котором возможно гарантированно детектировать box с номером.
Про дичь: слипаются в безумном танце 3 кадра.
Если "разобрать" видео на кадры, действительно на одном из кадров можно "поймать" box, где более-менее отчетливо виден номер. Однако, для этого нужно: записать видео, разобрать видео на кадры, проанализировать несколько кадров, отбраковывая плохие. Это дорого для одноплатника. Кроме того, это не будет работать, если мерцающая строка длинная, т.е. нужен не только номер, но и надписи и т.п.
Склейка фото как отдельный вид искусства (как распознать мерцающую строку)