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: Функції
Методи#
disposeget_coiget_load_frameget_num_pixelsget_template_heightget_template_widthget_thresholdget_total_xget_total_yset_coiset_load_frameset_total_xset_total_yset_thresholdswap_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, і навпаки.