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#
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()
- 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_interestNovi 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:
newValueNova 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_xnova 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_ynova vrijednost za total_y- Povratne vrijednosti:
nema
Postavite total_y za framediff paket.
set_threshold#
fdiff:set_threshold(integer threshold)
- Parametri:
thresholdNova 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.