Lua API: framediff#
Descriere#
Structura de date framediff conține informații despre diferența dintre două cadre diferite făcute cu CMUcam3. Intern, aceste cadre sunt păstrate într-un șablon „curent” și „anterior”. Comparațiile dintre aceste două șabloane se fac folosind framediff_scanline_start, framediff_scanline și framediff_scanline_finish.
Exemplu#
Acest exemplu demonstrează o implementare folosind CMUcam3 și diferențierea cadrelor. Se execută în buclă, făcând fotografii până când o fotografie este diferită de cea precedentă, moment în care salvează acea fotografie pe disc apelând 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();
Constructor#
Consultați framediff_new în Lua API: Funcții
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:
niciuna
- Valori returnate:
niciuna
Oferă o modalitate de a elibera explicit memoria asociată cu această structură de date framediff în loc să așteptați ca colectorul de gunoi Lua să elibereze acea memorie. Avertisment: Este probabil să apară erori din utilizarea unui framediff după apelarea dispose asupra lui, este foarte recomandat să nu faceți acest lucru.
get_coi#
fdiff:get_coi()
- Parametri:
niciuna
- Valori returnate:
canalul de interes pentru această structură framediff.
Obține canalul de interes pentru această structură. Consultați constantele canalului de interes din Lua API: Constante pentru valorile de returnare posibile.
get_load_frame#
fdiff:get_load_frame()
- Parametri:
niciuna
- Valori returnate:
dacă dorim sau nu să încărcăm un cadru nou
Obține valoarea load_frame pentru acest obiect framediff. load_frame determină dacă trebuie să încărcăm un cadru nou de la CMUcam3 înainte de a face orice diferențiere a șabloanelor curente și anterioare.
get_num_pixels#
fdiff:get_num_pixels()
- Parametri:
niciuna
- Valori returnate:
numărul de pixeli de diferență dintre șablonul curent și șablonul precedent
După ce utilizați framediff_scanline_start, framediff_scanline și framediff_scanline_finish, apelați această metodă pentru a obține numărul de pixeli de diferență care au fost găsiți între șablonul curent și cel anterior.
get_template_height#
fdiff:get_template_height()
- Parametri:
niciuna
- Valori returnate:
înălțimea șabloanelor
Obține înălțimea șabloanelor care sunt diferențiate.
get_template_width#
fdiff:get_template_width()
- Parametri:
niciuna
- Valori returnate:
lățimea șabloanelor
Obține lățimea șabloanelor care sunt diferențiate.
get_total_x#
fdiff:get_total_x()
- Parametri:
niciuna
- Valori returnate:
lățimea totală de analizat
Obține lățimea totală, de obicei echivalentă cu pixbuf_get_width
get_total_y#
fdiff:get_total_y()
- Parametri:
niciuna
- Valori returnate:
înălțimea totală de analizat
Obține lățimea totală, de obicei echivalentă cu pixbuf_get_height
set_coi#
fdiff:set_coi(integer channel_of_interest)
- Parametri:
channel_of_interestNoul canal de interes pentru diferențierea cadrelor- Valori returnate:
niciuna
Setează canalul de interes pentru diferențierea cadrelor. Parametrul channel_of_interest trebuie să fie una dintre constantele canalului de interes din Lua API: Constante.
set_load_frame#
fdiff:set_load_frame(boolean newValue)
- Parametri:
newValueNoua valoare- Valori returnate:
niciuna
Controlează dacă un cadru nou trebuie sau nu să fie încărcat în cursul următoarei runde de diferențiere a cadrelor. Dacă acest lucru este adevărat, o nouă fotografie va fi realizată și stocată ca șablon curent în scopul diferențierii cadrelor.
set_total_x#
fdiff:set_total_x(integer total_x)
- Parametri:
total_xnoua valoare pentru total_x- Valori returnate:
niciuna
Setează total_x pentru pachetul framediff.
set_total_y#
fdiff:set_total_y(integer total_y)
- Parametri:
total_ynoua valoare pentru total_y- Valori returnate:
niciuna
Setează total_y pentru pachetul framediff.
set_threshold#
fdiff:set_threshold(integer threshold)
- Parametri:
thresholdNoua valoare a pragului- Valori returnate:
niciuna
Setează pragul, în număr de pixeli diferență, care determină dacă un cadru este considerat „diferit” de un alt cadru.
swap_templates#
fdiff:swap_templates
- Parametri:
niciuna
- Valori returnate:
niciuna
Schimbă șablonul curent și cel anterior în această structură framediff. Această funcție pune current_template în previous_template și invers.