Lua API: framediff#

Descrizione#

La struttura dati framediff contiene informazioni sulla differenza tra due fotogrammi diversi acquisiti con la CMUcam3. Internamente, questi fotogrammi sono contenuti in un template «current» e uno «previous». I confronti tra questi due template vengono effettuati utilizzando framediff_scanline_start, framediff_scanline e framediff_scanline_finish.

Esempio#

Questo esempio dimostra un’implementazione che utilizza la CMUcam3 e la differenza di fotogrammi. Esegue un ciclo, scattando foto finché una foto non è diversa dalla precedente, momento in cui salva quella foto su disco chiamando 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();

Costruttore#

Consulta framediff_new in Lua API: Funzioni

Metodi#

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

nessuno

Valori di ritorno:

nessuno

Fornisce un modo per liberare esplicitamente la memoria associata a questa struttura dati framediff invece di attendere che il garbage collector di Lua liberi quella memoria. Attenzione: è probabile che si verifichino errori se si utilizza un framediff dopo aver chiamato dispose su di esso, si raccomanda vivamente di non farlo.

get_coi#

fdiff:get_coi()

Parametri:

nessuno

Valori di ritorno:

il canale di interesse per questa struttura framediff.

Ottiene il canale di interesse per questa struttura. Consulta le costanti del canale di interesse in Lua API: Costanti per i possibili valori di ritorno.

get_load_frame#

fdiff:get_load_frame()

Parametri:

nessuno

Valori di ritorno:

se vogliamo o meno caricare un nuovo fotogramma

Ottiene il valore di load_frame per questo oggetto framediff. load_frame determina se è necessario caricare un nuovo fotogramma dalla CMUcam3 prima di effettuare qualsiasi confronto tra il template corrente e quello precedente.

get_num_pixels#

fdiff:get_num_pixels()

Parametri:

nessuno

Valori di ritorno:

il numero di pixel di differenza tra il template corrente e il template precedente

Dopo aver utilizzato framediff_scanline_start, framediff_scanline e framediff_scanline_finish, chiama questo metodo per ottenere il numero di pixel di differenza trovati tra il template corrente e quello precedente.

get_template_height#

fdiff:get_template_height()

Parametri:

nessuno

Valori di ritorno:

l’altezza dei template

Ottiene l’altezza dei template che vengono confrontati.

get_template_width#

fdiff:get_template_width()

Parametri:

nessuno

Valori di ritorno:

la larghezza dei template

Ottiene la larghezza dei template che vengono confrontati.

get_total_x#

fdiff:get_total_x()

Parametri:

nessuno

Valori di ritorno:

la larghezza totale da analizzare

Ottiene la larghezza totale, di solito equivalente a pixbuf_get_width

get_total_y#

fdiff:get_total_y()

Parametri:

nessuno

Valori di ritorno:

l’altezza totale da analizzare

Ottiene la larghezza totale, di solito equivalente a pixbuf_get_height

set_coi#

fdiff:set_coi(integer channel_of_interest)

Parametri:

channel_of_interest Il nuovo canale di interesse per la differenza di fotogrammi

Valori di ritorno:

nessuno

Imposta il canale di interesse per la differenziazione dei fotogrammi. Il parametro channel_of_interest deve essere una delle costanti del canale di interesse in Lua API: Costanti.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

Parametri:

newValue Il nuovo valore

Valori di ritorno:

nessuno

Controlla se è necessario o meno caricare un nuovo fotogramma nel corso del prossimo ciclo di differenziazione dei fotogrammi. Se questo è vero, verrà scattata una nuova immagine e memorizzata come template corrente ai fini della differenziazione dei fotogrammi.

set_total_x#

fdiff:set_total_x(integer total_x)

Parametri:

total_x il nuovo valore per total_x

Valori di ritorno:

nessuno

Imposta total_x per il pacchetto framediff.

set_total_y#

fdiff:set_total_y(integer total_y)

Parametri:

total_y il nuovo valore per total_y

Valori di ritorno:

nessuno

Imposta total_y per il pacchetto framediff.

set_threshold#

fdiff:set_threshold(integer threshold)

Parametri:

threshold Il nuovo valore di soglia

Valori di ritorno:

nessuno

Imposta la soglia, in numero di pixel di differenza, che determina se un fotogramma è considerato «diverso» da un altro fotogramma.

swap_templates#

fdiff:swap_templates

Parametri:

nessuno

Valori di ritorno:

nessuno

Scambia il template corrente e quello precedente in questa struttura framediff. Questa funzione mette il current_template nel previous_template, e viceversa.