Lua API: framediff#

Beschrijving#

De framediff-datastructuur bevat informatie over het verschil tussen twee verschillende frames die met de CMUcam3 zijn genomen. Intern worden deze frames bewaard in een “current”- en “previous”-template. Vergelijkingen tussen die twee templates worden gedaan met framediff_scanline_start, framediff_scanline en framediff_scanline_finish.

Voorbeeld#

Dit voorbeeld demonstreert een implementatie met de CMUcam3 en frameverschil. Het loopt, waarbij het foto’s maakt totdat één foto verschilt van de vorige, waarna het die foto op schijf opslaat door save_picture aan te roepen.

-- 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();

Constructor#

Zie framediff_new in Lua API: Functies

Methoden#

  • 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()

Parameters:

geen

Retourwaarden:

geen

Biedt een manier om het geheugen dat aan deze framediff-datastructuur is gekoppeld expliciet vrij te geven in plaats van te wachten tot de Lua-garbage collector dat geheugen vrijgeeft. Waarschuwing: Er zullen waarschijnlijk fouten optreden door een framediff te gebruiken nadat je er dispose op hebt aangeroepen; het wordt sterk aanbevolen dat je dat niet doet.

get_coi#

fdiff:get_coi()

Parameters:

geen

Retourwaarden:

het kanaal van interesse voor deze framediff-structuur.

Haal het kanaal van interesse voor deze structuur op. Zie de constanten voor het kanaal van interesse in Lua API: Constanten voor mogelijke retourwaarden.

get_load_frame#

fdiff:get_load_frame()

Parameters:

geen

Retourwaarden:

of we wel of niet een nieuw frame willen laden

Haal de waarde van load_frame voor dit framediff-object op. load_frame bepaalt of we een nieuw frame van de CMUcam3 moeten laden voordat we het verschil tussen de huidige en vorige templates bepalen.

get_num_pixels#

fdiff:get_num_pixels()

Parameters:

geen

Retourwaarden:

het aantal verschilpixels tussen de huidige template en de vorige template

Nadat je framediff_scanline_start, framediff_scanline en framediff_scanline_finish hebt gebruikt, roep je deze methode aan om het aantal verschilpixels te krijgen dat tussen de huidige en vorige template werd gevonden.

get_template_height#

fdiff:get_template_height()

Parameters:

geen

Retourwaarden:

de hoogte van de templates

Haal de hoogte op van de templates waarvan het verschil wordt bepaald.

get_template_width#

fdiff:get_template_width()

Parameters:

geen

Retourwaarden:

de breedte van de templates

Haal de breedte op van de templates waarvan het verschil wordt bepaald.

get_total_x#

fdiff:get_total_x()

Parameters:

geen

Retourwaarden:

de totale te analyseren breedte

Haal de totale breedte op, meestal gelijk aan pixbuf_get_width

get_total_y#

fdiff:get_total_y()

Parameters:

geen

Retourwaarden:

de totale te analyseren hoogte

Haal de totale breedte op, meestal gelijk aan pixbuf_get_height

set_coi#

fdiff:set_coi(integer channel_of_interest)

Parameters:

channel_of_interest Het nieuwe kanaal van interesse voor frameverschil

Retourwaarden:

geen

Stel het kanaal van interesse voor frameverschil in. De parameter channel_of_interest moet een van de constanten voor het kanaal van interesse zijn in Lua API: Constanten.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

Parameters:

newValue De nieuwe waarde

Retourwaarden:

geen

Bepaalt of er wel of niet een nieuw frame moet worden geladen tijdens de volgende ronde van frameverschil. Als dit waar is, wordt er een nieuwe foto genomen en opgeslagen als de huidige template voor frameverschildoeleinden.

set_total_x#

fdiff:set_total_x(integer total_x)

Parameters:

total_x de nieuwe waarde voor total_x

Retourwaarden:

geen

Stel total_x in voor het framediff-pakket.

set_total_y#

fdiff:set_total_y(integer total_y)

Parameters:

total_y de nieuwe waarde voor total_y

Retourwaarden:

geen

Stel total_y in voor het framediff-pakket.

set_threshold#

fdiff:set_threshold(integer threshold)

Parameters:

threshold De nieuwe drempelwaarde

Retourwaarden:

geen

Stel de drempelwaarde in, in aantal pixels verschil, die bepaalt of het ene frame als “verschillend” van een ander frame wordt beschouwd.

swap_templates#

fdiff:swap_templates

Parameters:

geen

Retourwaarden:

geen

Wisselt de huidige en vorige template in deze framediff-structuur om. Deze functie plaatst de current_template in de previous_template, en omgekeerd.