< Return to Video

Bluescreen

  • 0:01 - 0:06
    В этом разделе мы возьмем методы, которые мы изучали до сих пор. Это
  • 0:06 - 0:10
    цикл for, конструкцию if и метод для обнаружения цветных областей
  • 0:10 - 0:15
    и соединим их вместе для того чтобы создать реальный киношный сецэффект
  • 0:15 - 0:19
    называемый Blue Screening. И я должен уточнить, что то о чем вы думаете как о видео данных
  • 0:19 - 0:24
    на самом деле сделано из серий обычных картинок, показанных
  • 0:24 - 0:28
    от 20 до 60 раз в секунду. Таким образом, для наших целей мы будем просто делать спецэффекты
  • 0:28 - 0:33
    на стоп-кадрах, и Вы сможете увидеть как они обобщают в кино. Значит, идея состоит в том, что это будет
  • 0:33 - 0:38
    очень простая модель. Картинка, которая у меня - это картинка со знаком стоп. Значит, мы говорили
  • 0:38 - 0:42
    о коде чтобы определить красную область тут внутри. Для эффекта blue screen
  • 0:42 - 0:46
    мы будем имеить вторую картинку, которую я назову фоновой.
  • 0:46 - 0:50
    Идея состоит в том, что мы будем определять красные области так, как делали раньше. Но каждый раз, как
  • 0:50 - 0:54
    я получаю пиксель здесь на красной области, я хочу подумать о что-то вроде
  • 0:54 - 0:59
    соответствующего пикселя из этой второй картинки. И я собираюсь скопировать тот пиксель
  • 0:59 - 1:04
    чтобы поместить его в красную зону тут с пикселями отсюда с другой
  • 1:04 - 1:08
    картинки. В общем, вот немного более детальная диаграмма этого. Значит, я приведу
  • 1:08 - 1:12
    примеры немного позже. Но у нас будет цикл for где мы будем как бы
  • 1:12 - 1:16
    циклировать через эту картинку. И мыполучим выражение, которое определит
  • 1:16 - 1:21
    некоторые пиксели здесь вверху. Значит, давайте представим что мы определили этот пиксель на картинке
  • 1:21 - 1:25
    слева. Тогда этот пиксель имеет некую XY координату и мы не сильно оперировали с
  • 1:25 - 1:29
    XY дотеперь но она, вы знаете, может быть X 200 и Y 100, или другой.
  • 1:29 - 1:33
    Что мы хотим сделать - это получить этих два значения. И потом найти соответсвтующий
  • 1:33 - 1:38
    пиксель вот тут с другой картинки. Значит, наверное в диапазоне 200-100.
  • 1:38 - 1:43
    Тут есть некоторый пиксель, который подходит. Значит как только мы получили эту соответствующую картинку (
  • 1:43 - 1:48
    соответствующий пиксель с другой картинки). Тогда мы хотим скопировать его чтобы поместить
  • 1:48 - 1:53
    пиксель тут. И вы знаете как это будет работать? Как вы скопируете
  • 1:53 - 1:57
    пиксель? Вы должны подумать вот о чем: "Что определяет пиксель? Что заставляет пиксель выглядеть
  • 1:57 - 2:01
    так, как он выглядит?" И ответ - это всего лишь три числа. Это всего лишь красный,
  • 2:01 - 2:05
    зеленый и синий. Значит мы собираемся написать код чтобы получить значение красного из
  • 2:05 - 2:09
    этого пикселя тут и потом присвоить его как значение красного тут. Аналогично и для
  • 2:09 - 2:13
    зеленого и синего. И присваивая все эти три числа мы собираемся сделать так, что
  • 2:13 - 2:17
    пиксель на этой картинке будет выглядеть точно так же, как пиксель тут на этой
  • 2:17 - 2:22
    стороне. Значит вот некий код, вот наш первый пример кода как это сделать. И вместо того,
  • 2:22 - 2:27
    чтобы описывать эффект, я думаю в этом случае я просто запущу его, чтобы мы увидели
  • 2:27 - 2:32
    его, и потом я поговорю о том, что каждая из строк делает. Значит тут мы видим, как
  • 2:32 - 2:38
    указывалось раньше, знак стоп со всей его красной областью знака стоп.
  • 2:38 - 2:43
    Вместо этого мы выделили пиксели с главной картинки. Теперь дайте мне обьяснить,
  • 2:43 - 2:49
    как части этого работают. Прежде всего, во всех примерах до этого, я думаю
  • 2:49 - 2:53
    мы просто открыли одну картинку, но тут оказывается вы можете иметь много картинок. Поэтому тут
  • 2:53 - 2:57
    я открываю вторую картинку расширения jpeg и сохраняю ее в переменной
  • 2:57 - 3:01
    названной back. И весь этот код который мы видели до этого - я просто повторяю его по этому
  • 3:01 - 3:06
    знаку стоп и определяю красные пиксели. Интересное действие тут, внутри
  • 3:06 - 3:11
    выражения if. Что мы делаем, когда имеем красный пиксель, который разбиваем
  • 3:11 - 3:17
    на три части. Значит эти первые две линии просто назовем pixel.getX и pixel.getY и сохраним
  • 3:17 - 3:22
    результирующие значения в переменных x и y. Не думаю, что я использовал getX
  • 3:22 - 3:27
    и getY дотеперь, но что они делают - они просто идут к пикселю и
  • 3:27 - 3:32
    получаю X или Y с него. Это практически аналогично getRed и getBlue.
  • 3:32 - 3:38
    И я просто собираюсь хранить это в этих переменных x и y. И потом в этой строке я
  • 3:38 - 3:43
    бери этих два значение x и y. По сути я как бы читаю их слева направо тут. Итак
  • 3:43 - 3:47
    я возвращаюсь назад к картинке, и это картинка с листьями. И я вызываю getPixel и я
  • 3:47 - 3:52
    хочу извлечь пиксель отсюда. И потом я должен назначить ему x,y и в этом
  • 3:52 - 3:57
    случае это было сделано тут. Итак по существу,
  • 3:57 - 4:01
    это x и y пикселя из картинки со знаком стоп, неважно какие эти x и y,
  • 4:01 - 4:07
    говорим иди получи этот пиксель в том же x y из картинки с листками. Как только мы получили
  • 4:07 - 4:12
    тот пиксель, я просто собераюсь начать другую переменную названную "pixel два".
  • 4:12 - 4:16
    Итак естественным вопросом было бы чтото вроде: "Не могли бы мы просто назвать его pixel?" Ну,
  • 4:16 - 4:20
    мы не можем назвать его pixel, потому что мы уже используем переменную pixel, которая относится к пикселю
  • 4:20 - 4:24
    из картинки со знаком стоп. Итап pixel two - самое естественное другое
  • 4:24 - 4:29
    название. Отлично, итак на этом шаге, я получил pixel two, который относится к
  • 4:29 - 4:34
    пикселю из фоновой картинки, с другой картинки. И теперь эти три
  • 4:34 - 4:39
    строки делают то, что я описывал как копия до этого.
  • 4:39 - 4:43
    Итак тут говорится: pixel точка, укажи красный (pixel.setRed). Мы такое видели уже 100 раз. И теперь я установлю
  • 4:43 - 4:48
    красное значение пикселя из картинки из знака стоп.
  • 4:48 - 4:53
    И каким я его установлю? Я установлю ему значение pixeltwo.getRed.
  • 4:53 - 4:58
    Итак я получаю пиксель из другой картинки, получая его красное значение, 160 или какое оно там.
  • 4:58 - 5:02
    И теперь я просто установлю это значение в картинку со знаком стоп.
  • 5:02 - 5:07
    Потом повторяя эту процедуру для зеленого и красного - мы просто копируем
  • 5:07 - 5:12
    все три значения. И это по сути копирует сам пиксель. Итак это очень
  • 5:12 - 5:17
    сложно. Я хочу сделать несколько примеров этого. Позвольте мне сделать второй пример.
  • 5:17 - 5:22
    Это картинка ребенка Abby, когда ей примерно 6 месяцев. Радостное маленькое дитя на
  • 5:22 - 5:28
    ее прыгающем стуле. И поздене, когда она станет подростком, она может быть зла на меня за использование
  • 5:28 - 5:33
    этой картинки. Итак я собираюсь в этом случае
  • 5:34 - 5:39
    обратить внимание на зеленые области прыгающего стула. Я хочу как бы скопировать
  • 5:39 - 5:45
    листки чтобы получить как бы природный ребенко-листковой эффект. И в основе нужно
  • 5:45 - 5:51
    всего две вещи в цикле. Вначале я должен
  • 5:51 - 5:57
    указать, что я собираюсь вызвать pixel.getGreen для проверки if.
  • 5:57 - 6:02
    Итак первая проблема была следущая: Получить pixel two, получить соответствующий пиксель.
  • 6:02 - 6:07
    И тут я собираюсь написать это всего в одной строке. Итак я возвращаюсь к другой
  • 6:07 - 6:12
    картинке. Back . get pixel. И я
Title:
Bluescreen
Description:

дописываю

more » « less
Video Language:
English
Ostap Gonchar edited Russian subtitles for Bluescreen
Ostap Gonchar edited Russian subtitles for Bluescreen
ToxCoder added a translation

Russian subtitles

Incomplete

Revisions