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#
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()
- 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_interestIl 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:
newValueIl 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_xil 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_yil nuovo valore per total_y- Valori di ritorno:
nessuno
Imposta total_y per il pacchetto framediff.
set_threshold#
fdiff:set_threshold(integer threshold)
- Parametri:
thresholdIl 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.