Lua API: framediff#
Popis#
Datová struktura framediff obsahuje informace o rozdílu mezi dvěma různými snímky pořízenými pomocí CMUcam3. Interně jsou tyto snímky uchovávány v šabloně „current“ a „previous“. Porovnání mezi těmito dvěma šablonami se provádí pomocí framediff_scanline_start, framediff_scanline a framediff_scanline_finish.
Příklad#
Tento příklad demonstruje implementaci pomocí CMUcam3 a rozdílu snímků. Cyklicky pořizuje snímky, dokud se jeden snímek neliší od předchozího, přičemž v tom okamžiku uloží tento snímek na disk voláním 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();
Konstruktor#
Viz framediff_new v Lua API: Funkce
Metody#
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()
- Parametry:
žádný
- Návratové hodnoty:
žádný
Poskytuje způsob, jak explicitně uvolnit paměť spojenou s touto datovou strukturou framediff namísto čekání, až tuto paměť uvolní garbage collector Lua. Varování: Použití framediff po zavolání dispose na něm pravděpodobně povede k chybám, důrazně se doporučuje tak nečinit.
get_coi#
fdiff:get_coi()
- Parametry:
žádný
- Návratové hodnoty:
sledovaný kanál pro tuto strukturu framediff.
Získá kanál zájmu pro tuto strukturu. Možné návratové hodnoty naleznete v konstantách kanálu zájmu v Lua API: Konstanty.
get_load_frame#
fdiff:get_load_frame()
- Parametry:
žádný
- Návratové hodnoty:
zda chceme či nechceme načíst nový snímek
Získá hodnotu load_frame pro tento objekt framediff. load_frame určuje, zda potřebujeme načíst nový snímek z CMUcam3 před provedením jakéhokoli rozdílování aktuální a předchozí šablony.
get_num_pixels#
fdiff:get_num_pixels()
- Parametry:
žádný
- Návratové hodnoty:
počet pixelů rozdílu mezi aktuální šablonou a předchozí šablonou
Po použití framediff_scanline_start, framediff_scanline a framediff_scanline_finish zavolejte tuto metodu pro získání počtu pixelů rozdílu, které byly nalezeny mezi aktuální a předchozí šablonou.
get_template_height#
fdiff:get_template_height()
- Parametry:
žádný
- Návratové hodnoty:
výška šablon
Získá výšku rozdílovaných šablon.
get_template_width#
fdiff:get_template_width()
- Parametry:
žádný
- Návratové hodnoty:
šířka šablon
Získá šířku rozdílovaných šablon.
get_total_x#
fdiff:get_total_x()
- Parametry:
žádný
- Návratové hodnoty:
celková šířka, která má být analyzována
Získá celkovou šířku, obvykle ekvivalentní pixbuf_get_width
get_total_y#
fdiff:get_total_y()
- Parametry:
žádný
- Návratové hodnoty:
celková výška, která má být analyzována
Získá celkovou šířku, obvykle ekvivalentní pixbuf_get_height
set_coi#
fdiff:set_coi(integer channel_of_interest)
- Parametry:
channel_of_interestNový sledovaný kanál pro rozdíl snímků- Návratové hodnoty:
žádný
Nastavte kanál zájmu pro rozdílování snímků. Parametr channel_of_interest musí být jedna z konstant kanálu zájmu v Lua API: Konstanty.
set_load_frame#
fdiff:set_load_frame(boolean newValue)
- Parametry:
newValueNová hodnota- Návratové hodnoty:
žádný
Řídí, zda je či není nutné načíst nový snímek v průběhu dalšího kola rozdílování snímků. Pokud je to pravda, bude pořízen nový snímek a uložen jako aktuální šablona pro účely rozdílování snímků.
set_total_x#
fdiff:set_total_x(integer total_x)
- Parametry:
total_xnová hodnota pro total_x- Návratové hodnoty:
žádný
Nastavte total_x pro paket framediff.
set_total_y#
fdiff:set_total_y(integer total_y)
- Parametry:
total_ynová hodnota pro total_y- Návratové hodnoty:
žádný
Nastavte total_y pro paket framediff.
set_threshold#
fdiff:set_threshold(integer threshold)
- Parametry:
thresholdNová hodnota prahu- Návratové hodnoty:
žádný
Nastavte práh, v počtu pixelů rozdílu, který určuje, zda je jeden snímek považován za „odlišný“ od jiného snímku.
swap_templates#
fdiff:swap_templates
- Parametry:
žádný
- Návratové hodnoty:
žádný
Prohodí aktuální a předchozí šablonu v této struktuře framediff. Tato funkce umístí current_template do previous_template a naopak.