Учитывая известный цвет фона (# 000) и известный цвет переднего плана (#fff), как я могу рассчитать непрозрачность для соответствия эталонным изображениям? - PullRequest
0 голосов
/ 09 июля 2019

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

В другом вопросе SO я нашел одну строку, которая позволяет мне найти самый яркий пиксель:

convert 0000$a.png -colorspace HSB -format %c histogram:info:-  | sort -t',' -gr -k 3 | head -1 | sed 's/.* hsb.*,.*,\([0-9.]*\)%.*/\1/

Во всем диапазоне видеокадры, я получаю хорошую кривую логарифма от 0 до 100. Я подумал, что могу взять эти числа, добавить их в непрозрачность svg для текстового элемента и экспортировать png.

Однако результатыдико отличается от оригинала, который я пытаюсь подражать.Frame 50 Имеет яркость 8,49447%.Это выглядит следующим образом:

enter image description here

Это выглядит черным для моих глаз (кадр 49 измеряет 0%).

Если яустановив непрозрачность белого текста на 8,49%, я получаю следующие результаты:

enter image description here

Это все еще довольно темно, но гораздо более заметно.

Очевидно, яркость пикселей не аналогична непрозрачности белого на черном фоне.Сами числа в некотором роде правильные, в том смысле, что моя кривая затухает с тем, что выглядит как правильная скорость, но она начинает ярче и становится ярче кадр за кадром, пока они оба не достигнут 100%.

Могу ли я преобразовать это значение в соответствующее значение непрозрачности?Мне нужно другое значение полностью?Если бы это было всего несколько кадров, я бы просто посмотрел на них, но у меня есть то, что выглядит как несколько тысяч, чтобы получить право (для разных сцен).

Используемая мной командная строкаследующее:

for a in `seq -f %06g 50 72`; do o=`convert $a.png -colorspace HSB -format %c histogram:info:-  | sort -t',' -gr -k 3 | head -1 | sed 's/.* hsb.*,.*,\([0-9.]*\)%.*/\1/'`; p=0`echo "scale=6;$o/100"|bc -l`; sed "s|ABC|$p|" ../svg/scene000.svg > ../temp.svg; /Applications/Inkscape.app/Contents/Resources/bin/inkscape -f /Users/user/ep1/temp.svg -e /Users/user/ep1/4k/$a.png -z > /dev/null; echo -e "$a.png\t$o\t\t$p"; done

И я вижу эти значения для кадров:

000050.png  8.49447     0.084944
000051.png  11.0702     0.110702
000052.png  16.6186     0.166186
000053.png  27.7847     0.277847
000054.png  32.5076     0.325076
000055.png  40.0663     0.400663
000056.png  46.6477     0.466477
000057.png  52.6319     0.526319
000058.png  62.2218     0.622218
000059.png  64.1088     0.641088
000060.png  71.5642     0.715642
000061.png  76.4314     0.764314
000062.png  81.3782     0.813782
000063.png  81.3782     0.813782
000064.png  85.1114     0.851114
000065.png  85.1114     0.851114
000066.png  88.8427     0.888427
000067.png  91.8013     0.918013
000068.png  93.7057     0.937057
000069.png  94.4534     0.944534
000070.png  97.7247     0.977247
000071.png  97.7247     0.977247
000072.png  99.8274     0.998274
...