Lua API: framediff#

Описание#

Структура данных framediff хранит информацию о различии между двумя разными кадрами, снятыми с помощью CMUcam3. Внутренне эти кадры хранятся в шаблонах «current» (текущий) и «previous» (предыдущий). Сравнения между этими двумя шаблонами выполняются с помощью framediff_scanline_start, framediff_scanline и framediff_scanline_finish.

Пример#

Этот пример демонстрирует реализацию с использованием CMUcam3 и покадрового вычитания. Он выполняется в цикле, делая снимки, пока один снимок не будет отличаться от предыдущего, после чего он сохраняет этот снимок на диск, вызывая 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 Новое значение

Возвращаемые значения:

нет

Управляет тем, нужно ли загружать новый кадр в ходе следующего раунда вычисления разности кадров. Если это значение истинно, будет сделан новый снимок и сохранён в качестве текущего шаблона для целей вычисления разности кадров.

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 и наоборот.