WEBVTT 00:00:00.840 --> 00:00:05.641 В этом разделе мы возьмем методы, которые мы изучали до сих пор. Это 00:00:05.641 --> 00:00:10.210 цикл for, конструкцию if и метод для обнаружения цветных областей 00:00:10.210 --> 00:00:14.996 и соединим их вместе для того чтобы создать реальный киношный сецэффект 00:00:14.996 --> 00:00:19.477 называемый Blue Screening. И я должен уточнить, что то о чем вы думаете как о видео данных 00:00:19.477 --> 00:00:23.905 на самом деле сделано из серий обычных картинок, показанных 00:00:23.905 --> 00:00:28.493 от 20 до 60 раз в секунду. Таким образом, для наших целей мы будем просто делать спецэффекты 00:00:28.493 --> 00:00:33.294 на стоп-кадрах, и Вы сможете увидеть как они обобщают в кино. Значит, идея состоит в том, что это будет 00:00:33.294 --> 00:00:37.561 очень простая модель. Картинка, которая у меня - это картинка со знаком стоп. Значит, мы говорили 00:00:37.561 --> 00:00:41.551 о коде чтобы определить красную область тут внутри. Для эффекта blue screen 00:00:41.562 --> 00:00:45.830 мы будем имеить вторую картинку, которую я назову фоновой. 00:00:45.830 --> 00:00:50.234 Идея состоит в том, что мы будем определять красные области так, как делали раньше. Но каждый раз, как 00:00:50.234 --> 00:00:54.352 я получаю пиксель здесь на красной области, я хочу подумать о что-то вроде 00:00:54.352 --> 00:00:59.043 соответствующего пикселя из этой второй картинки. И я собираюсь скопировать тот пиксель 00:00:59.043 --> 00:01:03.676 чтобы поместить его в красную зону тут с пикселями отсюда с другой 00:01:03.676 --> 00:01:07.747 картинки. В общем, вот немного более детальная диаграмма этого. Значит, я приведу 00:01:07.747 --> 00:01:11.959 примеры немного позже. Но у нас будет цикл for где мы будем как бы 00:01:11.959 --> 00:01:16.379 циклировать через эту картинку. И мыполучим выражение, которое определит 00:01:16.379 --> 00:01:20.538 некоторые пиксели здесь вверху. Значит, давайте представим что мы определили этот пиксель на картинке 00:01:20.538 --> 00:01:24.542 слева. Тогда этот пиксель имеет некую XY координату и мы не сильно оперировали с 00:01:24.542 --> 00:01:28.650 XY дотеперь но она, вы знаете, может быть X 200 и Y 100, или другой. 00:01:28.806 --> 00:01:33.212 Что мы хотим сделать - это получить этих два значения. И потом найти соответсвтующий 00:01:33.212 --> 00:01:37.750 пиксель вот тут с другой картинки. Значит, наверное в диапазоне 200-100. 00:01:37.750 --> 00:01:42.840 Тут есть некоторый пиксель, который подходит. Значит как только мы получили эту соответствующую картинку ( 00:01:42.840 --> 00:01:47.868 соответствующий пиксель с другой картинки). Тогда мы хотим скопировать его чтобы поместить 00:01:47.868 --> 00:01:53.079 пиксель тут. И вы знаете как это будет работать? Как вы скопируете 00:01:53.079 --> 00:01:57.143 пиксель? Вы должны подумать вот о чем: "Что определяет пиксель? Что заставляет пиксель выглядеть 00:01:57.143 --> 00:02:01.029 так, как он выглядит?" И ответ - это всего лишь три числа. Это всего лишь красный, 00:02:01.029 --> 00:02:04.965 зеленый и синий. Значит мы собираемся написать код чтобы получить значение красного из 00:02:04.965 --> 00:02:08.951 этого пикселя тут и потом присвоить его как значение красного тут. Аналогично и для 00:02:08.951 --> 00:02:13.139 зеленого и синего. И присваивая все эти три числа мы собираемся сделать так, что 00:02:13.139 --> 00:02:17.327 пиксель на этой картинке будет выглядеть точно так же, как пиксель тут на этой 00:02:17.327 --> 00:02:22.184 стороне. Значит вот некий код, вот наш первый пример кода как это сделать. И вместо того, 00:02:22.184 --> 00:02:27.493 чтобы описывать эффект, я думаю в этом случае я просто запущу его, чтобы мы увидели 00:02:27.493 --> 00:02:32.417 его, и потом я поговорю о том, что каждая из строк делает. Значит тут мы видим, как 00:02:32.417 --> 00:02:37.598 указывалось раньше, знак стоп со всей его красной областью знака стоп. 00:02:37.789 --> 00:02:42.970 Вместо этого мы выделили пиксели с главной картинки. Теперь дайте мне обьяснить, 00:02:43.162 --> 00:02:48.686 как части этого работают. Прежде всего, во всех примерах до этого, я думаю 00:02:48.686 --> 00:02:52.866 мы просто открыли одну картинку, но тут оказывается вы можете иметь много картинок. Поэтому тут 00:02:52.866 --> 00:02:56.588 я открываю вторую картинку расширения jpeg и сохраняю ее в переменной 00:02:56.588 --> 00:03:01.232 названной back. И весь этот код который мы видели до этого - я просто повторяю его по этому 00:03:01.232 --> 00:03:06.259 знаку стоп и определяю красные пиксели. Интересное действие тут, внутри 00:03:06.259 --> 00:03:11.169 выражения if. Что мы делаем, когда имеем красный пиксель, который разбиваем 00:03:11.169 --> 00:03:16.730 на три части. Значит эти первые две линии просто назовем pixel.getX и pixel.getY и сохраним 00:03:16.730 --> 00:03:22.005 результирующие значения в переменных x и y. Не думаю, что я использовал getX 00:03:22.005 --> 00:03:26.694 и getY дотеперь, но что они делают - они просто идут к пикселю и 00:03:26.694 --> 00:03:31.840 получаю X или Y с него. Это практически аналогично getRed и getBlue. 00:03:32.311 --> 00:03:37.904 И я просто собираюсь хранить это в этих переменных x и y. И потом в этой строке я 00:03:37.904 --> 00:03:42.681 бери этих два значение x и y. По сути я как бы читаю их слева направо тут. Итак 00:03:42.681 --> 00:03:47.340 я возвращаюсь назад к картинке, и это картинка с листьями. И я вызываю getPixel и я 00:03:47.340 --> 00:03:52.116 хочу извлечь пиксель отсюда. И потом я должен назначить ему x,y и в этом 00:03:52.116 --> 00:03:56.775 случае это было сделано тут. Итак по существу, 00:03:56.775 --> 00:04:01.433 это x и y пикселя из картинки со знаком стоп, неважно какие эти x и y, 00:04:01.433 --> 00:04:06.574 говорим иди получи этот пиксель в том же x y из картинки с листками. Как только мы получили 00:04:06.574 --> 00:04:12.017 тот пиксель, я просто собераюсь начать другую переменную названную "pixel два". 00:04:12.230 --> 00:04:16.131 Итак естественным вопросом было бы чтото вроде: "Не могли бы мы просто назвать его pixel?" Ну, 00:04:16.131 --> 00:04:20.131 мы не можем назвать его pixel, потому что мы уже используем переменную pixel, которая относится к пикселю 00:04:20.131 --> 00:04:23.984 из картинки со знаком стоп. Итап pixel two - самое естественное другое 00:04:23.984 --> 00:04:29.122 название. Отлично, итак на этом шаге, я получил pixel two, который относится к 00:04:29.122 --> 00:04:34.156 пикселю из фоновой картинки, с другой картинки. И теперь эти три 00:04:34.156 --> 00:04:39.003 строки делают то, что я описывал как копия до этого. 00:04:39.003 --> 00:04:43.445 Итак тут говорится: pixel точка, укажи красный (pixel.setRed). Мы такое видели уже 100 раз. И теперь я установлю 00:04:43.445 --> 00:04:48.118 красное значение пикселя из картинки из знака стоп. 00:04:48.118 --> 00:04:52.837 И каким я его установлю? Я установлю ему значение pixeltwo.getRed. 00:04:52.837 --> 00:04:57.699 Итак я получаю пиксель из другой картинки, получая его красное значение, 160 или какое оно там. 00:04:57.699 --> 00:05:02.253 И теперь я просто установлю это значение в картинку со знаком стоп. 00:05:02.253 --> 00:05:07.176 Потом повторяя эту процедуру для зеленого и красного - мы просто копируем 00:05:07.176 --> 00:05:11.787 все три значения. И это по сути копирует сам пиксель. Итак это очень 00:05:11.787 --> 00:05:16.885 сложно. Я хочу сделать несколько примеров этого. Позвольте мне сделать второй пример. 00:05:16.885 --> 00:05:22.109 Это картинка ребенка Abby, когда ей примерно 6 месяцев. Радостное маленькое дитя на 00:05:22.109 --> 00:05:27.715 ее прыгающем стуле. И поздене, когда она станет подростком, она может быть зла на меня за использование 00:05:27.715 --> 00:05:33.474 этой картинки. Итак я собираюсь в этом случае 00:05:33.690 --> 00:05:39.089 обратить внимание на зеленые области прыгающего стула. Я хочу как бы скопировать 00:05:39.089 --> 00:05:45.064 листки чтобы получить как бы природный ребенко-листковой эффект. И в основе нужно 00:05:45.064 --> 00:05:50.934 всего две вещи в цикле. Вначале я должен 00:05:50.934 --> 00:05:56.539 указать, что я собираюсь вызвать pixel.getGreen для проверки if. 00:05:56.539 --> 00:06:01.677 Итак первая проблема была следущая: Получить pixel two, получить соответствующий пиксель. 00:06:01.677 --> 00:06:07.216 И тут я собираюсь написать это всего в одной строке. Итак я возвращаюсь к другой 00:06:07.216 --> 00:06:12.451 картинке. Back . get pixel. И я