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#

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

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_interest Nový 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:

newValue Nová 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_x nová 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_y nová hodnota pro total_y

Návratové hodnoty:

žádný

Nastavte total_y pro paket framediff.

set_threshold#

fdiff:set_threshold(integer threshold)

Parametry:

threshold Nová 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.