Lua API: framediff#

Kuvaus#

framediff-tietorakenne sisältää tietoa kahden eri CMUcam3:lla otetun kehyksen välisestä erosta. Sisäisesti nämä kehykset pidetään ”nykyisessä” ja ”edellisessä” mallissa. Vertailut näiden kahden mallin välillä tehdään funktioilla framediff_scanline_start, framediff_scanline ja framediff_scanline_finish.

Esimerkki#

Tämä esimerkki havainnollistaa toteutusta, jossa käytetään CMUcam3:a ja kehysvertailua. Se toistaa silmukkaa ottaen kuvia, kunnes yksi kuva eroaa edellisestä, jolloin se tallentaa kyseisen kuvan levylle kutsumalla 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();

Muodostin#

Katso framediff_new kohdassa Lua API: funktiot

Metodit#

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

Parametrit:

ei mitään

Paluuarvot:

ei mitään

Tarjoaa tavan vapauttaa tähän framediff-tietorakenteeseen liittyvä muisti eksplisiittisesti sen sijaan, että odotettaisiin Lua-roskienkerääjän vapauttavan kyseisen muistin. Varoitus: framediffin käyttäminen sen jälkeen, kun sille on kutsuttu dispose:a, aiheuttaa todennäköisesti virheitä; on erittäin suositeltavaa, ettet tee niin.

get_coi#

fdiff:get_coi()

Parametrit:

ei mitään

Paluuarvot:

tämän framediff-rakenteen kiinnostava kanava.

Hae tämän rakenteen kiinnostuksen kohteena oleva kanava. Katso kiinnostuksen kohteena olevan kanavan vakiot kohdasta Lua API: vakiot mahdollisia paluuarvoja varten.

get_load_frame#

fdiff:get_load_frame()

Parametrit:

ei mitään

Paluuarvot:

halutaanko ladata uusi kehys vai ei

Hae tämän framediff-objektin load_frame-arvo. load_frame määrittää, tarvitseeko meidän ladata uusi ruutu CMUcam3:sta ennen nykyisen ja edellisen mallin erottamista.

get_num_pixels#

fdiff:get_num_pixels()

Parametrit:

ei mitään

Paluuarvot:

erojen pikselien lukumäärä nykyisen mallin ja edellisen mallin välillä

Käytettyäsi funktioita framediff_scanline_start, framediff_scanline ja framediff_scanline_finish kutsu tätä metodia saadaksesi nykyisen ja edellisen mallin välillä löydettyjen erotuspikselien lukumäärän.

get_template_height#

fdiff:get_template_height()

Parametrit:

ei mitään

Paluuarvot:

mallien korkeus

Hae erotettavien mallien korkeus.

get_template_width#

fdiff:get_template_width()

Parametrit:

ei mitään

Paluuarvot:

mallien leveys

Hae erotettavien mallien leveys.

get_total_x#

fdiff:get_total_x()

Parametrit:

ei mitään

Paluuarvot:

analysoitava kokonaisleveys

Hae kokonaisleveys, yleensä sama kuin pixbuf_get_width

get_total_y#

fdiff:get_total_y()

Parametrit:

ei mitään

Paluuarvot:

analysoitava kokonaiskorkeus

Hae kokonaisleveys, yleensä sama kuin pixbuf_get_height

set_coi#

fdiff:set_coi(integer channel_of_interest)

Parametrit:

channel_of_interest Uusi kiinnostava kanava kehysvertailua varten

Paluuarvot:

ei mitään

Aseta kiinnostava kanava kehysvertailua varten. Parametrin channel_of_interest täytyy olla yksi kiinnostavan kanavan vakioista kohdassa Lua API: vakiot.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

Parametrit:

newValue Uusi arvo

Paluuarvot:

ei mitään

Määrittää, tarvitseeko uusi ruutu ladata seuraavan ruutuerotuskierroksen aikana. Jos tämä on tosi, uusi kuva otetaan ja tallennetaan nykyiseksi malliksi ruutuerotusta varten.

set_total_x#

fdiff:set_total_x(integer total_x)

Parametrit:

total_x uusi arvo total_x:lle

Paluuarvot:

ei mitään

Aseta total_x framediff-paketille.

set_total_y#

fdiff:set_total_y(integer total_y)

Parametrit:

total_y uusi arvo total_y:lle

Paluuarvot:

ei mitään

Aseta total_y framediff-paketille.

set_threshold#

fdiff:set_threshold(integer threshold)

Parametrit:

threshold Uusi kynnysarvo

Paluuarvot:

ei mitään

Aseta kynnysarvo pikselieron lukumääränä, joka määrittää, pidetäänkö yhtä kehystä ”erilaisena” toiseen kehykseen verrattuna.

swap_templates#

fdiff:swap_templates

Parametrit:

ei mitään

Paluuarvot:

ei mitään

Vaihtaa nykyisen ja edellisen mallin keskenään tässä framediff-rakenteessa. Tämä funktio siirtää current_template-mallin previous_template-malliin ja päinvastoin.