Lua API: framediff#

Опис#

Структура даних framediff містить інформацію про різницю між двома різними кадрами, знятими за допомогою CMUcam3. Внутрішньо ці кадри зберігаються в «поточному» та «попередньому» шаблонах. Порівняння між цими двома шаблонами виконуються за допомогою framediff_scanline_start, framediff_scanline та framediff_scanline_finish.

Приклад#

Цей приклад демонструє реалізацію з використанням CMUcam3 та порівняння кадрів (frame differencing). Він виконується у циклі, роблячи знімки, доки один знімок не відрізнятиметься від попереднього, після чого зберігає цей знімок на диск, викликаючи save_picture.

-- get a new framediff, and initialize it
fdiff = framediff_new(16, 16);
fdiff:set_total_x(pixbuf_get_width());
fdiff:set_total_y(pixbuf_get_height());
fdiff:set_threshold(10);
img = image_new(pixbuf_get_width(), 1); -- need an image object for the framediff'ing

take_picture();
fdiff:set_load_frame(true);

-- take the first picture
if (framediff_scanline_start(fdiff) > 0) then
    while pixbuf_read_rows(img, 1) > 0 do
        framediff_scanline(img, fdiff);
    end
    framediff_scanline_finish(fdiff);
end

fdiff:set_load_frame(false);

-- now keep taking pictures until a picture is different than its predecessor
repeat
    take_picture();
    if (framediff_scanline_start(fdiff) > 0) then
        while pixbuf_read_rows(img, 1) > 0 do
            framediff_scanline(img, fdiff);
        end
        framediff_scanline_finish(fdiff);
    else
        print("Error!");
    end

    fdiff:swap_templates(); -- put current template in previous template spot
until fdiff:get_num_pixels() > fdiff:get_threshold()

-- we got an image that was different! Save it to disk, and send it to the Camscripter
save_picture("Diff.ppm"):
print_picture();

Конструктор#

Дивіться framediff_new в Lua API: Функції

Методи#

  • dispose

  • get_coi

  • get_load_frame

  • get_num_pixels

  • get_template_height

  • get_template_width

  • get_threshold

  • get_total_x

  • get_total_y

  • set_coi

  • set_load_frame

  • set_total_x

  • set_total_y

  • set_threshold

  • swap_templates

dispose#

fdiff:dispose()

Параметри:

немає

Значення, що повертаються:

немає

Надає спосіб явно звільнити пам’ять, пов’язану з цією структурою даних framediff, замість того щоб чекати, поки збирач сміття Lua звільнить цю пам’ять. Попередження: Використання framediff після виклику dispose на ньому, ймовірно, призведе до помилок, тому наполегливо рекомендується цього не робити.

get_coi#

fdiff:get_coi()

Параметри:

немає

Значення, що повертаються:

канал інтересу для цієї структури framediff.

Отримати цільовий канал для цієї структури. Дивіться константи цільового каналу в Lua API: Константи для можливих значень, що повертаються.

get_load_frame#

fdiff:get_load_frame()

Параметри:

немає

Значення, що повертаються:

чи хочемо ми завантажити новий кадр

Отримати значення load_frame для цього об’єкта framediff. load_frame визначає, чи потрібно нам завантажити новий кадр з CMUcam3, перш ніж виконувати будь-яке віднімання поточного та попереднього шаблонів.

get_num_pixels#

fdiff:get_num_pixels()

Параметри:

немає

Значення, що повертаються:

кількість пікселів різниці між поточним шаблоном та попереднім шаблоном

Після використання framediff_scanline_start, framediff_scanline та framediff_scanline_finish викличте цей метод, щоб отримати кількість пікселів різниці, знайдених між поточним і попереднім шаблоном.

get_template_height#

fdiff:get_template_height()

Параметри:

немає

Значення, що повертаються:

висота шаблонів

Отримати висоту шаблонів, що піддаються відніманню.

get_template_width#

fdiff:get_template_width()

Параметри:

немає

Значення, що повертаються:

ширина шаблонів

Отримати ширину шаблонів, що піддаються відніманню.

get_total_x#

fdiff:get_total_x()

Параметри:

немає

Значення, що повертаються:

загальна ширина для аналізу

Отримати загальну ширину, зазвичай еквівалентну pixbuf_get_width

get_total_y#

fdiff:get_total_y()

Параметри:

немає

Значення, що повертаються:

загальна висота для аналізу

Отримати загальну ширину, зазвичай еквівалентну pixbuf_get_height

set_coi#

fdiff:set_coi(integer channel_of_interest)

Параметри:

channel_of_interest Новий канал інтересу для порівняння кадрів

Значення, що повертаються:

немає

Встановити цільовий канал для віднімання кадрів. Параметр channel_of_interest має бути однією з констант цільового каналу в Lua API: Константи.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

Параметри:

newValue Нове значення

Значення, що повертаються:

немає

Керує тим, чи потрібно завантажувати новий кадр у ході наступного раунду віднімання кадрів. Якщо це true, буде зроблено новий знімок і збережено як поточний шаблон для цілей віднімання кадрів.

set_total_x#

fdiff:set_total_x(integer total_x)

Параметри:

total_x нове значення для total_x

Значення, що повертаються:

немає

Встановити total_x для пакета framediff.

set_total_y#

fdiff:set_total_y(integer total_y)

Параметри:

total_y нове значення для total_y

Значення, що повертаються:

немає

Встановити total_y для пакета framediff.

set_threshold#

fdiff:set_threshold(integer threshold)

Параметри:

threshold Нове порогове значення

Значення, що повертаються:

немає

Встановити поріг, у кількості пікселів різниці, який визначає, чи вважається один кадр «відмінним» від іншого кадру.

swap_templates#

fdiff:swap_templates

Параметри:

немає

Значення, що повертаються:

немає

Міняє місцями поточний і попередній шаблони в цій структурі framediff. Ця функція поміщає current_template у previous_template, і навпаки.