Главная » Processing » Действия с пикселями в видео Processing

0

В первом примере этой главы вы узнали, как загрузить видеофайл и отобразить кадры из него на экране с помощью функции image(). В этом примере мы посмотрим, как мы можем изменить отображение видео на экране, изменив цвет некоторых пикселей.

Как это делается

Первая часть скетча аналогична предыдущему примеру. Это импорт библиотеки video, объявление объекта Movie, загрузка видеофайла и запуск непрерывного проигрывания.

import processing.video.*;

Movie m;

int numPixels;

void setup()

{

size( 640, 480 );

numPixels = width * height;

m = new Movie( this, "marbles.mov" ); m.loop();

}

Реальные изменения в этом примере находятся в функции draw(). Мы выведем каждый кадр на экран с помощью функции image(). После этого мы изменим цвет тех пикселей, яркость которых меньше 245.

void draw()

{

background( 0 );

image( m, 0, 0, width, height );

loadPixels();

for ( int i = 0; i < numPixels; i++ ) { float b = brightness( pixels[i] );

if ( b > 245 ) {

pixels[i] = lerpColor( pixels[i], color(0, 0, 0), map(b, 0, 255, 0, 1));

}

}

updatePixels();

}

void movieEvent( Movie m )

{

m.read();

}

Когда вы запустите скетч, вы увидите, что большинство пикселей черные, так как наше видео не очень яркое.

После вывода изображений на экран я использовал функцию loadPixels() для загрузки всех пикселей с экрана в массив пикселей. Для прохода по всем пикселям и проверки яркости я использовал цикл for. Для тех пикселей, которые ярче 245, цвет пикселя смешивается с черным. После замены цветов вызывается функция updatePixels() для показа на экране нового изображения.

Функция lerpColor() используется для смешивания двух цветов. Первые два параметра этой функции используются для указания цветов, которые вы хотите смешать, а третий параметр определяет, каким образом цвета будут смешиваться. Этот параметр находится в диапазоне от 0 до 1. Если вы запишете 0.1, результирующий цвет будет ближе к первому цвету. Если вы запишете 0.9, то он будет больше похож на второй цвет. Для смешивания цветов в равных пропорциях вы можете указать в третьем параметре 0.5.

Если яркость вашего видео меньше, чем этого, вы можете снизить границу яркости. Это приведет к другому результату. Также для установки границы яркости вы можете использовать значения hue() и saturation() каждого пикселя.

Источник: Ян Вантомм, Processing 2: креативное программирование, перевод с английского Александры Мишутиной, Published by Packt Publishing Ltd., 2012, BIRMINGHAM – MUMBAI.

По теме:

  • Комментарии