1 00:00:00,840 --> 00:00:05,641 В этом разделе мы возьмем методы, которые мы изучали до сих пор. Это 2 00:00:05,641 --> 00:00:10,210 цикл for, конструкцию if и метод для обнаружения цветных областей 3 00:00:10,210 --> 00:00:14,996 и соединим их вместе для того чтобы создать реальный киношный сецэффект 4 00:00:14,996 --> 00:00:19,477 называемый Blue Screening. И я должен уточнить, что то о чем вы думаете как о видео данных 5 00:00:19,477 --> 00:00:23,905 на самом деле сделано из серий обычных картинок, показанных 6 00:00:23,905 --> 00:00:28,493 от 20 до 60 раз в секунду. Таким образом, для наших целей мы будем просто делать спецэффекты 7 00:00:28,493 --> 00:00:33,294 на стоп-кадрах, и Вы сможете увидеть как они обобщают в кино. Значит, идея состоит в том, что это будет 8 00:00:33,294 --> 00:00:37,561 очень простая модель. Картинка, которая у меня - это картинка со знаком стоп. Значит, мы говорили 9 00:00:37,561 --> 00:00:41,551 о коде чтобы определить красную область тут внутри. Для эффекта blue screen 10 00:00:41,562 --> 00:00:45,830 мы будем имеить вторую картинку, которую я назову фоновой. 11 00:00:45,830 --> 00:00:50,234 Идея состоит в том, что мы будем определять красные области так, как делали раньше. Но каждый раз, как 12 00:00:50,234 --> 00:00:54,352 я получаю пиксель здесь на красной области, я хочу подумать о что-то вроде 13 00:00:54,352 --> 00:00:59,043 соответствующего пикселя из этой второй картинки. И я собираюсь скопировать тот пиксель 14 00:00:59,043 --> 00:01:03,676 чтобы поместить его в красную зону тут с пикселями отсюда с другой 15 00:01:03,676 --> 00:01:07,747 картинки. В общем, вот немного более детальная диаграмма этого. Значит, я приведу 16 00:01:07,747 --> 00:01:11,959 примеры немного позже. Но у нас будет цикл for где мы будем как бы 17 00:01:11,959 --> 00:01:16,379 циклировать через эту картинку. И мыполучим выражение, которое определит 18 00:01:16,379 --> 00:01:20,538 некоторые пиксели здесь вверху. Значит, давайте представим что мы определили этот пиксель на картинке 19 00:01:20,538 --> 00:01:24,542 слева. Тогда этот пиксель имеет некую XY координату и мы не сильно оперировали с 20 00:01:24,542 --> 00:01:28,650 XY дотеперь но она, вы знаете, может быть X 200 и Y 100, или другой. 21 00:01:28,806 --> 00:01:33,212 Что мы хотим сделать - это получить этих два значения. И потом найти соответсвтующий 22 00:01:33,212 --> 00:01:37,750 пиксель вот тут с другой картинки. Значит, наверное в диапазоне 200-100. 23 00:01:37,750 --> 00:01:42,840 Тут есть некоторый пиксель, который подходит. Значит как только мы получили эту соответствующую картинку ( 24 00:01:42,840 --> 00:01:47,868 соответствующий пиксель с другой картинки). Тогда мы хотим скопировать его чтобы поместить 25 00:01:47,868 --> 00:01:53,079 пиксель тут. И вы знаете как это будет работать? Как вы скопируете 26 00:01:53,079 --> 00:01:57,143 пиксель? Вы должны подумать вот о чем: "Что определяет пиксель? Что заставляет пиксель выглядеть 27 00:01:57,143 --> 00:02:01,029 так, как он выглядит?" И ответ - это всего лишь три числа. Это всего лишь красный, 28 00:02:01,029 --> 00:02:04,965 зеленый и синий. Значит мы собираемся написать код чтобы получить значение красного из 29 00:02:04,965 --> 00:02:08,951 этого пикселя тут и потом присвоить его как значение красного тут. Аналогично и для 30 00:02:08,951 --> 00:02:13,139 зеленого и синего. И присваивая все эти три числа мы собираемся сделать так, что 31 00:02:13,139 --> 00:02:17,327 пиксель на этой картинке будет выглядеть точно так же, как пиксель тут на этой 32 00:02:17,327 --> 00:02:22,184 стороне. Значит вот некий код, вот наш первый пример кода как это сделать. И вместо того, 33 00:02:22,184 --> 00:02:27,493 чтобы описывать эффект, я думаю в этом случае я просто запущу его, чтобы мы увидели 34 00:02:27,493 --> 00:02:32,417 его, и потом я поговорю о том, что каждая из строк делает. Значит тут мы видим, как 35 00:02:32,417 --> 00:02:37,598 указывалось раньше, знак стоп со всей его красной областью знака стоп. 36 00:02:37,789 --> 00:02:42,970 Вместо этого мы выделили пиксели с главной картинки. Теперь дайте мне обьяснить, 37 00:02:43,162 --> 00:02:48,686 как части этого работают. Прежде всего, во всех примерах до этого, я думаю 38 00:02:48,686 --> 00:02:52,866 мы просто открыли одну картинку, но тут оказывается вы можете иметь много картинок. Поэтому тут 39 00:02:52,866 --> 00:02:56,588 я открываю вторую картинку расширения jpeg и сохраняю ее в переменной 40 00:02:56,588 --> 00:03:01,232 названной back. И весь этот код который мы видели до этого - я просто повторяю его по этому 41 00:03:01,232 --> 00:03:06,259 знаку стоп и определяю красные пиксели. Интересное действие тут, внутри 42 00:03:06,259 --> 00:03:11,169 выражения if. Что мы делаем, когда имеем красный пиксель, который разбиваем 43 00:03:11,169 --> 00:03:16,730 на три части. Значит эти первые две линии просто назовем pixel.getX и pixel.getY и сохраним 44 00:03:16,730 --> 00:03:22,005 результирующие значения в переменных x и y. Не думаю, что я использовал getX 45 00:03:22,005 --> 00:03:26,694 и getY дотеперь, но что они делают - они просто идут к пикселю и 46 00:03:26,694 --> 00:03:31,840 получаю X или Y с него. Это практически аналогично getRed и getBlue. 47 00:03:32,311 --> 00:03:37,904 И я просто собираюсь хранить это в этих переменных x и y. И потом в этой строке я 48 00:03:37,904 --> 00:03:42,681 бери этих два значение x и y. По сути я как бы читаю их слева направо тут. Итак 49 00:03:42,681 --> 00:03:47,340 я возвращаюсь назад к картинке, и это картинка с листьями. И я вызываю getPixel и я 50 00:03:47,340 --> 00:03:52,116 хочу извлечь пиксель отсюда. И потом я должен назначить ему x,y и в этом 51 00:03:52,116 --> 00:03:56,775 случае это было сделано тут. Итак по существу, 52 00:03:56,775 --> 00:04:01,433 это x и y пикселя из картинки со знаком стоп, неважно какие эти x и y, 53 00:04:01,433 --> 00:04:06,574 говорим иди получи этот пиксель в том же x y из картинки с листками. Как только мы получили 54 00:04:06,574 --> 00:04:12,017 тот пиксель, я просто собераюсь начать другую переменную названную "pixel два". 55 00:04:12,230 --> 00:04:16,131 Итак естественным вопросом было бы чтото вроде: "Не могли бы мы просто назвать его pixel?" Ну, 56 00:04:16,131 --> 00:04:20,131 мы не можем назвать его pixel, потому что мы уже используем переменную pixel, которая относится к пикселю 57 00:04:20,131 --> 00:04:23,984 из картинки со знаком стоп. Итап pixel two - самое естественное другое 58 00:04:23,984 --> 00:04:29,122 название. Отлично, итак на этом шаге, я получил pixel two, который относится к 59 00:04:29,122 --> 00:04:34,156 пикселю из фоновой картинки, с другой картинки. И теперь эти три 60 00:04:34,156 --> 00:04:39,003 строки делают то, что я описывал как копия до этого. 61 00:04:39,003 --> 00:04:43,445 Итак тут говорится: pixel точка, укажи красный (pixel.setRed). Мы такое видели уже 100 раз. И теперь я установлю 62 00:04:43,445 --> 00:04:48,118 красное значение пикселя из картинки из знака стоп. 63 00:04:48,118 --> 00:04:52,837 И каким я его установлю? Я установлю ему значение pixeltwo.getRed. 64 00:04:52,837 --> 00:04:57,699 Итак я получаю пиксель из другой картинки, получая его красное значение, 160 или какое оно там. 65 00:04:57,699 --> 00:05:02,253 И теперь я просто установлю это значение в картинку со знаком стоп. 66 00:05:02,253 --> 00:05:07,176 Потом повторяя эту процедуру для зеленого и красного - мы просто копируем 67 00:05:07,176 --> 00:05:11,787 все три значения. И это по сути копирует сам пиксель. Итак это очень 68 00:05:11,787 --> 00:05:16,885 сложно. Я хочу сделать несколько примеров этого. Позвольте мне сделать второй пример. 69 00:05:16,885 --> 00:05:22,109 Это картинка ребенка Abby, когда ей примерно 6 месяцев. Радостное маленькое дитя на 70 00:05:22,109 --> 00:05:27,715 ее прыгающем стуле. И поздене, когда она станет подростком, она может быть зла на меня за использование 71 00:05:27,715 --> 00:05:33,474 этой картинки. Итак я собираюсь в этом случае 72 00:05:33,690 --> 00:05:39,089 обратить внимание на зеленые области прыгающего стула. Я хочу как бы скопировать 73 00:05:39,089 --> 00:05:45,064 листки чтобы получить как бы природный ребенко-листковой эффект. И в основе нужно 74 00:05:45,064 --> 00:05:50,934 всего две вещи в цикле. Вначале я должен 75 00:05:50,934 --> 00:05:56,539 указать, что я собираюсь вызвать pixel.getGreen для проверки if. 76 00:05:56,539 --> 00:06:01,677 Итак первая проблема была следущая: Получить pixel two, получить соответствующий пиксель. 77 00:06:01,677 --> 00:06:07,216 И тут я собираюсь написать это всего в одной строке. Итак я возвращаюсь к другой 78 00:06:07,216 --> 00:06:12,451 картинке. Back . get pixel. И я