Відстеження великих об’єктів у Processing

Тепер, коли ви знаєте, як прімненіть до відео алгоритм обмеження, можна попрацювати з пікселями Ми намалюємо прямокутник навколо білих пікселів Це найпростіший алгоритм, повязаний з яскравістю і дуже зручний, якщо ми хочемо створити інтерактивну інсталяцію з вебкамерою

Як це робиться

Почнемо з імпорту бібліотеки video та оголошення декількох змінних Для доступу до вебкамере нам потрібен обєкт Capture і ціла змінна для зберігання граничної величини Інші цілі змінні використовуються для відстеження кордонів білих пікселів зображення

import processingvideo*

Capture webcam int threshold

int topLeftX int topLeftY

int bottomRightX int bottomRightY

void setup()

{

size( 640, 480 )

webcam = new Capture( this, width, height, 30) webcamstart()

threshold = 127

topLeftX = width topLeftY = height

bottomRightX = 0

bottomRightY = 0

}

У функції draw () ми зробимо алгоритм обмеження, такий же, як у прикладі Розмічаємо відео Ми переберемо масив пікселів за допомогою вкладеного циклу for, тому що нам потрібно знати точне місце розташування кожного білого пікселя для оновлення значення змінних з кордонами Залишок коду не відрізняється від минулого прикладу

void draw()

{

if ( webcamavailable() ) { webcamread()

image( webcam, 0, 0 ) loadPixels()

int counter = 0

for ( int j = 0 j &lt webcamheight j++ ) { for ( int i = 0 i &lt webcamwidth i++ ) {

color c = webcampixels[counter] float b = brightness( c )

if ( b &gt threshold ) { pixels[counter] = color( 255 ) if ( i &lt topLeftX ) {

topLeftX = i

}

if ( j &lt topLeftY ) { topLeftY = j

}

if ( i &gt bottomRightX ) { bottomRightX = i

}

if ( j &gt bottomRightY ) { bottomRightY = j

}

} else {

pixels[counter] = color( 0 )

}

counter++

}

}

updatePixels()

noFill()

stroke( 255, 0, 0 )

strokeWeight( 2 )

rect( topLeftX, topLeftY, bottomRightX – topLeftX, bottomRightY – topLeftY )

// reset tracking points topLeftX = width topLeftY = height

bottomRightX = 0

bottomRightY = 0

fill( 255, 0, 0 )

noStroke()

rect( 10, 10, 110, 20 )

fill( 255 )

text( &quotThreshold: &quot + threshold, 14, 24 )

}

}

void keyPressed()

{

if ( key == CODED ) {

if ( keyCode == UP ) { threshold++

}

if ( keyCode == DOWN ) { threshold–

}

}

}

Коли ви запустите скетч, ви побачите червоний прямокутник навколо білих пікселів Цей алгоритм найкраще працює в темній кімнаті, коли ви висвітлюєте щось лампою

Як це працює

Алгоритм відстеження досить простий Якщо яскравість пікселя більше граничної величини, ми перефарбовувати піксель в білий У кожному кадрі обчислюються координати верхнього лівого і правого нижнього кута Подивимося, як це відбувається для лівого верхнього кута

На початку кожного кадру значення змінної topLeftX одно ширині вікна скетчу Мінлива topLeftY дорівнює висоті вікна Вони вказують на правий нижній кут вікна скетчу

topLeftX = width topLeftY = height

Цикл for з лічильником i використовується для перебору рядів пікселів Якщо піксель – білий, ми порівнюємо його місце розташування з величиною topLeftX Якщо вона менше, ми міняємо значення ми міняємо значення змінної topLeftX З кожним кроком ми наближаємося до координати x крайнього лівого пікселя Цикл for з лічильником j використовується для перебору стовпців пікселів Аналогічно ми отримуємо координату y самого верхнього пікселя Для цього я застосував функцію min () Ця функція повертає найменше значення з двох введених:

topLeftX = min( i, topLeftX ) topLeftY = min( j, topLeftY )

Змінні i і j також порівнюються зі значеннями bottomRightX і bottomRightY для обчислення лівого верхнього кута скетчу Але на цей раз вони повинні бути більше Для цього я застосував функцію max () Ця функція діє назад функції min () і воращает більше число з двох введених Коли ми знайдемо всі потрібні координати, ми зможемо намалювати навколо білих пікселів прямокутник за допомогою цього рядка коду:

rect( topLeftX, topLeftY, bottomRightX – topLeftX, bottomRightY – topLeftY )

Після виведення на екран прямокутника потрібно присвоїти координатам їх початкові значення, щоб в наступному кадрі обчислити нові

Джерело: Ян Вантомм, Processing 2: креативне програмування, переклад з англійської Олександри Мішутіної, Published by Packt Publishing Ltd, 2012, BIRMINGHAM – MUMBAI

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*