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#
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()
- 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_interestUusi 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:
newValueUusi 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_xuusi 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_yuusi arvo total_y:lle- Paluuarvot:
ei mitään
Aseta total_y framediff-paketille.
set_threshold#
fdiff:set_threshold(integer threshold)
- Parametrit:
thresholdUusi 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.