Розмічаємо відео в Processing

Застосування обмежує фільтра може стати зручним прийомом для проектів з компютерним зором Це може стати в нагоді для відстеження великих обєктів Цей прийом дуже простий Ви порівнюєте яскравість кожного пікселя з вебкамери з деяким граничним значенням Пікселі з високою яскравістю стануть білими, а пікселі з більш низькою яскравістю – чорними В результаті ви отримаєте зображення, що складається виключно з чорних і білих пікселів

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

Почніть з імпорту бібліотеки video Ви навчилися це робити в прикладі Використання вебкамери Після оголошення обєкта Capture нам потрібно ще оголосити цілі змінні під іменами numPixels і threshold

import processingvideo* Capture webcam

int numPixels int threshold

У функції setup () ми запустимо вебкамеру за аналогією з прикладом Використання вебкамери Мінлива numPixels буде зберігати загальна кількість пікселів в зображенні з вебкамери Це зручно, тому що ми будемо перебирати їх по одному у функції draw () Для початку привласнимо змінної threshold значення 127

void setup()

{

size( 640, 480 )

smooth()

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

numPixels = webcamwidth * webcamheight threshold = 127

}

У функції draw () ми використовуємо метод webcamavailable () перед захопленням нового зображення і виведенням його на екран Код між функціями loadPixels () і updatePixels () це алгоритм обмеження Також ви виведемо на екран червоний прямокутник з текстом, що відображає поточну граничну величину

void draw()

{

if ( webcamavailable() ) { webcamread()

image( webcam, 0, 0 )

loadPixels()

for ( int i = 0 i &lt numPixels i++ ) { float b = brightness( webcampixels[i] ) if ( b &gt threshold ) {

pixels[i] = color( 255 )

} else {

pixels[i] = color( 0 )

}

}

updatePixels()

}

fill( 255, 0, 0 )

noStroke()

rect( 10, 10, 110, 20 )

fill( 255 )

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

}

Функція keyPressed () використовується як інтерфейс для управління значенням граничної величини По натискання клавіші-стрілки вгору гранична величина збільшиться, при натисканні на стрілку вниз – зменшиться

void keyPressed()

{

if ( key == CODED ) {

if ( keyCode == UP ) { threshold++

}

if ( keyCode == DOWN ) { threshold–

}

}

}

Запустіть скетч, понажимайте на клавіші-стрілки вгору і вниз і подивіться на результат

Як це працює

Можливо, ви помітили, що в цьому скетчі я не використовував функцію captureEvent () У функції draw () я застосував метод webcamavailable (), який повертає логічну змінну Якщо доступний новий кадр, це величина є Істон Якщо іользовать цей метод з умовою if, код в умові виконуватиметься тільки коли буде доступний новий кадр Я вважав нове зображення за допомогою методу webcamread () і відображаючи його за допомогою вбудованої в Processing функції image ()

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

for ( int i = 0 i &lt numPixels i++ ) { float b = brightness( webcampixels[i] ) if ( b &gt threshold ) {

pixels[i] = color( 255 )

} else {

pixels[i] = color( 0 )

}

}

Натискаючи на клавіші вгору і вниз ви можете регулювати граничну величину Високе значення граничної величини призведе до більшої кількості чорних пікселів, низьке – навпаки Але в кінцевому рахунку результат буде залежати багато в чому від освітлення кімнати, в якій ви знаходитеся

Джерело: Ян Вантомм, 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>

*

*