Lua API: framediff#

Opis#

Struktura podataka framediff sadrži informacije o razlici između dva različita okvira snimljena s CMUcam3. Interno, ti se okviri drže u „trenutnom” i „prethodnom” predlošku. Usporedbe između ta dva predloška obavljaju se pomoću framediff_scanline_start, framediff_scanline i framediff_scanline_finish.

Primjer#

Ovaj primjer demonstrira implementaciju koristeći CMUcam3 i razlikovanje okvira. Vrti se u petlji, snimajući slike sve dok jedna slika ne bude različita od prethodne, u kojem trenutku sprema tu sliku na disk pozivanjem 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#

Pogledajte framediff_new u Lua API: funkcije

Metode#

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

Parametri:

nema

Povratne vrijednosti:

nema

Pruža način za eksplicitno oslobađanje memorije povezane s ovom framediff strukturom podataka umjesto čekanja da je Lua skupljač smeća oslobodi. Upozorenje: Vjerojatno je da će do grešaka doći ako se framediff koristi nakon poziva dispose na njemu, izrazito se preporučuje da to ne činite.

get_coi#

fdiff:get_coi()

Parametri:

nema

Povratne vrijednosti:

kanal od interesa za ovu framediff strukturu.

Dohvatite kanal od interesa za ovu strukturu. Pogledajte konstante kanala od interesa u Lua API: konstante za moguće povratne vrijednosti.

get_load_frame#

fdiff:get_load_frame()

Parametri:

nema

Povratne vrijednosti:

želimo li učitati novi okvir ili ne

Dohvatite vrijednost load_frame za ovaj framediff objekt. load_frame određuje trebamo li učitati novu sličicu s CMUcam3 prije bilo kakvog uspoređivanja trenutnog i prethodnog predloška.

get_num_pixels#

fdiff:get_num_pixels()

Parametri:

nema

Povratne vrijednosti:

broj piksela razlike između trenutnog predloška i prethodnog predloška

Nakon korištenja framediff_scanline_start, framediff_scanline i framediff_scanline_finish, pozovite ovu metodu za dobivanje broja piksela razlike koji su pronađeni između trenutnog i prethodnog predloška.

get_template_height#

fdiff:get_template_height()

Parametri:

nema

Povratne vrijednosti:

visina predložaka

Dohvatite visinu predložaka koji se uspoređuju.

get_template_width#

fdiff:get_template_width()

Parametri:

nema

Povratne vrijednosti:

širina predložaka

Dohvatite širinu predložaka koji se uspoređuju.

get_total_x#

fdiff:get_total_x()

Parametri:

nema

Povratne vrijednosti:

ukupna širina za analizu

Dohvatite ukupnu širinu, obično ekvivalentnu pixbuf_get_width

get_total_y#

fdiff:get_total_y()

Parametri:

nema

Povratne vrijednosti:

ukupna visina za analizu

Dohvatite ukupnu širinu, obično ekvivalentnu pixbuf_get_height

set_coi#

fdiff:set_coi(integer channel_of_interest)

Parametri:

channel_of_interest Novi kanal od interesa za razlikovanje okvira

Povratne vrijednosti:

nema

Postavite kanal od interesa za framedifferencing. Parametar channel_of_interest mora biti jedna od konstanti kanala od interesa u Lua API: konstante.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

Parametri:

newValue Nova vrijednost

Povratne vrijednosti:

nema

Kontrolira treba li se učitati nova sličica tijekom sljedeće runde diferenciranja sličica. Ako je ovo istinito (true), snimit će se nova slika i pohraniti kao trenutni predložak za potrebe diferenciranja sličica.

set_total_x#

fdiff:set_total_x(integer total_x)

Parametri:

total_x nova vrijednost za total_x

Povratne vrijednosti:

nema

Postavite total_x za framediff paket.

set_total_y#

fdiff:set_total_y(integer total_y)

Parametri:

total_y nova vrijednost za total_y

Povratne vrijednosti:

nema

Postavite total_y za framediff paket.

set_threshold#

fdiff:set_threshold(integer threshold)

Parametri:

threshold Nova vrijednost praga

Povratne vrijednosti:

nema

Postavite prag, u broju piksela razlike, koji određuje smatra li se jedan okvir „različitim” od drugog okvira.

swap_templates#

fdiff:swap_templates

Parametri:

nema

Povratne vrijednosti:

nema

Zamjenjuje trenutni i prethodni predložak u ovoj framediff strukturi. Ova funkcija stavlja current_template u previous_template i obrnuto.