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#

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

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

newValue Det 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_x det 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_y det 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:

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