Lua API: framediff#
Beskrivning#
framediff-datastrukturen håller information om skillnaden mellan två olika bilder tagna med CMUcam3. Internt hålls dessa bilder i en ”current”- och en ”previous”-mall. Jämförelser mellan dessa två mallar görs med framediff_scanline_start, framediff_scanline och framediff_scanline_finish.
Exempel#
Detta exempel demonstrerar en implementation med CMUcam3 och bildskillnadsberäkning. Den loopar och tar bilder tills en bild skiljer sig från den föregående, varvid den sparar den bilden till disk genom att anropa 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#
Se framediff_new i Lua API: Funktioner
Metoder#
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()
- Parametrar:
ingen
- Returvärden:
ingen
Ger ett sätt att uttryckligen frigöra minne som är kopplat till denna framediff-datastruktur i stället för att vänta på att Luas skräpsamlare ska frigöra det minnet. Varning: Fel uppstår sannolikt av att använda en framediff efter att ha anropat dispose på den, det rekommenderas starkt att du inte gör så.
get_coi#
fdiff:get_coi()
- Parametrar:
ingen
- Returvärden:
kanalen av intresse för denna framediff-struktur.
Hämta den kanal av intresse för denna struktur. Se konstanterna för kanal av intresse i Lua API: Konstanter för möjliga returvärden.
get_load_frame#
fdiff:get_load_frame()
- Parametrar:
ingen
- Returvärden:
huruvida vi vill ladda en ny bildruta eller inte
Hämta värdet på load_frame för detta framediff-objekt. load_frame avgör om vi behöver ladda en ny bild från CMUcam3 innan någon jämförelse görs av den aktuella och den föregående mallen.
get_num_pixels#
fdiff:get_num_pixels()
- Parametrar:
ingen
- Returvärden:
antalet pixlar i skillnad mellan den aktuella mallen och den föregående mallen
Efter att ha använt framediff_scanline_start, framediff_scanline och framediff_scanline_finish, anropa denna metod för att få antalet pixlar med skillnad som hittades mellan den aktuella och den föregående mallen.
get_template_height#
fdiff:get_template_height()
- Parametrar:
ingen
- Returvärden:
höjden på mallarna
Hämta höjden på de mallar som jämförs.
get_template_width#
fdiff:get_template_width()
- Parametrar:
ingen
- Returvärden:
bredden på mallarna
Hämta bredden på de mallar som jämförs.
get_total_x#
fdiff:get_total_x()
- Parametrar:
ingen
- Returvärden:
den totala bredden som ska analyseras
Hämta den totala bredden, vanligtvis motsvarande pixbuf_get_width
get_total_y#
fdiff:get_total_y()
- Parametrar:
ingen
- Returvärden:
den totala höjden som ska analyseras
Hämta den totala bredden, vanligtvis motsvarande pixbuf_get_height
set_coi#
fdiff:set_coi(integer channel_of_interest)
- Parametrar:
channel_of_interestDen nya kanalen av intresse för bildskillnadsberäkning- Returvärden:
ingen
Ställ in kanal av intresse för bildskillnadsberäkning. Parametern channel_of_interest måste vara en av konstanterna för kanal av intresse i Lua API: Konstanter.
set_load_frame#
fdiff:set_load_frame(boolean newValue)
- Parametrar:
newValueDet nya värdet- Returvärden:
ingen
Styr om en ny bild behöver laddas under nästa runda av bildskillnadsberäkning eller inte. Om detta är sant tas en ny bild och lagras som den aktuella mallen för bildskillnadsändamål.
set_total_x#
fdiff:set_total_x(integer total_x)
- Parametrar:
total_xdet nya värdet för total_x- Returvärden:
ingen
Ställ in total_x för framediff-paketet.
set_total_y#
fdiff:set_total_y(integer total_y)
- Parametrar:
total_ydet nya värdet för total_y- Returvärden:
ingen
Ställ in total_y för framediff-paketet.
set_threshold#
fdiff:set_threshold(integer threshold)
- Parametrar:
thresholdDet nya tröskelvärdet- Returvärden:
ingen
Ställ in tröskeln, i antal pixlars skillnad, som avgör om en bild anses ”annorlunda” än en annan bild.
swap_templates#
fdiff:swap_templates
- Parametrar:
ingen
- Returvärden:
ingen
Byter plats på den aktuella och den föregående mallen i denna framediff-struktur. Denna funktion lägger current_template i previous_template, och vice versa.