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#

  • 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:

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_interest Noul 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:

newValue Noua 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_x noua 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_y noua valoare pentru total_y

Valori returnate:

niciuna

Setează total_y pentru pachetul framediff.

set_threshold#

fdiff:set_threshold(integer threshold)

Parametri:

threshold Noua 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.