Lua API: framediff#

Leírás#

A framediff adatszerkezet információt tartalmaz a CMUcam3-mal készített két különböző képkocka közötti különbségről. Belsőleg ezeket a képkockákat egy „current” és egy „previous” sablonban tárolják. A két sablon közötti összehasonlítások a framediff_scanline_start, framediff_scanline és framediff_scanline_finish használatával történnek.

Példa#

Ez a példa egy megvalósítást mutat be a CMUcam3 és a képkockakülönbség-számítás használatával. Ciklusban fut, képeket készít, amíg az egyik kép nem különbözik az előzőtől, ekkor lemezre menti azt a képet a save_picture meghívásával.

-- 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#

Lásd a framediff_new függvényt a Lua API: Függvények oldalon

Metódusok#

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

Paraméterek:

nincs

Visszatérési értékek:

nincs

Lehetőséget biztosít arra, hogy explicit módon szabadítsa fel az ehhez a framediff adatszerkezethez tartozó memóriát, ahelyett, hogy megvárná, amíg a Lua szemétgyűjtő felszabadítja azt a memóriát. Figyelmeztetés: Egy framediff dispose meghívása utáni használatából valószínűleg hibák keletkeznek, erősen ajánlott, hogy ezt ne tegye.

get_coi#

fdiff:get_coi()

Paraméterek:

nincs

Visszatérési értékek:

ennek a framediff szerkezetnek az érdeklődésre számot tartó csatornája.

Kérje le ennek a szerkezetnek az érdeklődésre számot tartó csatornáját. A lehetséges visszatérési értékekért lásd az érdeklődésre számot tartó csatorna konstansait a Lua API: Konstansok oldalon.

get_load_frame#

fdiff:get_load_frame()

Paraméterek:

nincs

Visszatérési értékek:

hogy szeretnénk-e új képkockát betölteni, vagy sem

Kérje le ennek a framediff objektumnak a load_frame értékét. A load_frame azt határozza meg, hogy be kell-e töltenünk egy új képkockát a CMUcam3-ból, mielőtt bármilyen különbség-számítást végeznénk az aktuális és az előző sablon között.

get_num_pixels#

fdiff:get_num_pixels()

Paraméterek:

nincs

Visszatérési értékek:

a jelenlegi sablon és az előző sablon közötti eltérő pixelek száma

A framediff_scanline_start, framediff_scanline és framediff_scanline_finish használata után hívja meg ezt a metódust, hogy megkapja a jelenlegi és az előző sablon között talált eltérő pixelek számát.

get_template_height#

fdiff:get_template_height()

Paraméterek:

nincs

Visszatérési értékek:

a sablonok magassága

Kérje le a különbség-számításnak alávetett sablonok magasságát.

get_template_width#

fdiff:get_template_width()

Paraméterek:

nincs

Visszatérési értékek:

a sablonok szélessége

Kérje le a különbség-számításnak alávetett sablonok szélességét.

get_total_x#

fdiff:get_total_x()

Paraméterek:

nincs

Visszatérési értékek:

az elemzendő teljes szélesség

Kérje le a teljes szélességet, amely általában megegyezik a pixbuf_get_width értékkel

get_total_y#

fdiff:get_total_y()

Paraméterek:

nincs

Visszatérési értékek:

az elemzendő teljes magasság

Kérje le a teljes szélességet, amely általában megegyezik a pixbuf_get_height értékkel

set_coi#

fdiff:set_coi(integer channel_of_interest)

Paraméterek:

channel_of_interest Az új érdeklődésre számot tartó csatorna a képkockakülönbség-számításhoz

Visszatérési értékek:

nincs

Állítsa be az érdeklődésre számot tartó csatornát a képkockakülönbség-számításhoz. A channel_of_interest paraméternek a Lua API: Konstansok oldalon található, érdeklődésre számot tartó csatorna konstansok egyikének kell lennie.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

Paraméterek:

newValue Az új érték

Visszatérési értékek:

nincs

Szabályozza, hogy szükséges-e új képkocka betöltése a képkockakülönbség-számítás következő körében. Ha ez igaz, egy új kép készül, és a képkockakülönbség-számítás céljából az aktuális sablonként tárolódik.

set_total_x#

fdiff:set_total_x(integer total_x)

Paraméterek:

total_x a total_x új értéke

Visszatérési értékek:

nincs

Állítsa be a total_x értékét a framediff csomaghoz.

set_total_y#

fdiff:set_total_y(integer total_y)

Paraméterek:

total_y a total_y új értéke

Visszatérési értékek:

nincs

Állítsa be a total_y értékét a framediff csomaghoz.

set_threshold#

fdiff:set_threshold(integer threshold)

Paraméterek:

threshold Az új küszöbérték

Visszatérési értékek:

nincs

Állítsa be a küszöböt, a pixelek eltérésének számában, amely meghatározza, hogy az egyik képkocka „különbözőnek” minősül-e egy másik képkockától.

swap_templates#

fdiff:swap_templates

Paraméterek:

nincs

Visszatérési értékek:

nincs

Felcseréli az aktuális és az előző sablont ebben a framediff szerkezetben. Ez a függvény a current_template-et a previous_template-be teszi, és fordítva.