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#
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()
- 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_interestHet 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:
newValueDe 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_xde 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_yde nieuwe waarde voor total_y- Retourwaarden:
geen
Stel total_y in voor het framediff-pakket.
set_threshold#
fdiff:set_threshold(integer threshold)
- Parameters:
thresholdDe 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.