Lua API: framediff#
Descrição#
A estrutura de dados framediff contém informação sobre a diferença entre dois frames diferentes tirados com a CMUcam3. Internamente, estes frames são mantidos num template «current» e num «previous». As comparações entre esses dois templates são feitas utilizando framediff_scanline_start, framediff_scanline e framediff_scanline_finish.
Exemplo#
Este exemplo demonstra uma implementação utilizando a CMUcam3 e frame differencing. Faz um loop, tirando imagens até que uma imagem seja diferente da anterior, altura em que guarda essa imagem no disco chamando 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();
Construtor#
Consulte framediff_new em Lua API: Funções
Métodos#
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()
- Parâmetros:
nenhum
- Valores de Retorno:
nenhum
Fornece uma forma de libertar explicitamente a memória associada a esta estrutura de dados framediff, em vez de esperar que o garbage collector do Lua liberte essa memória. Aviso: É provável que resultem erros da utilização de um framediff depois de chamar dispose sobre ele; recomenda-se vivamente que não o faça.
get_coi#
fdiff:get_coi()
- Parâmetros:
nenhum
- Valores de Retorno:
o canal de interesse para esta estrutura framediff.
Obtém o canal de interesse para esta estrutura. Consulte as constantes de canal de interesse em Lua API: Constantes para os valores de retorno possíveis.
get_load_frame#
fdiff:get_load_frame()
- Parâmetros:
nenhum
- Valores de retorno:
se queremos ou não carregar um novo frame
Obtém o valor de load_frame para este objeto framediff. load_frame determina se precisamos de carregar um novo frame da CMUcam3 antes de fazer qualquer comparação entre os templates atual e anterior.
get_num_pixels#
fdiff:get_num_pixels()
- Parâmetros:
nenhum
- Valores de Retorno:
o número de pixels de diferença entre o template atual e o template anterior
Depois de utilizar framediff_scanline_start, framediff_scanline e framediff_scanline_finish, chame este método para obter o número de pixels de diferença que foram encontrados entre o template atual e o anterior.
get_template_height#
fdiff:get_template_height()
- Parâmetros:
nenhum
- Valores de Retorno:
a altura dos templates
Obtém a altura dos templates que estão a ser comparados.
get_template_width#
fdiff:get_template_width()
- Parâmetros:
nenhum
- Valores de Retorno:
a largura dos templates
Obtém a largura dos templates que estão a ser comparados.
get_total_x#
fdiff:get_total_x()
- Parâmetros:
nenhum
- Valores de Retorno:
a largura total a ser analisada
Obtém a largura total, normalmente equivalente a pixbuf_get_width
get_total_y#
fdiff:get_total_y()
- Parâmetros:
nenhum
- Valores de Retorno:
a altura total a ser analisada
Obtém a largura total, normalmente equivalente a pixbuf_get_height
set_coi#
fdiff:set_coi(integer channel_of_interest)
- Parâmetros:
channel_of_interestO novo canal de interesse para a diferenciação de frames- Valores de Retorno:
nenhum
Define o canal de interesse para o framedifferencing. O parâmetro channel_of_interest tem de ser uma das constantes de canal de interesse em Lua API: Constantes.
set_load_frame#
fdiff:set_load_frame(boolean newValue)
- Parâmetros:
newValueO novo valor- Valores de Retorno:
nenhum
Controla se um novo frame precisa ou não de ser carregado no decurso da próxima ronda de frame differencing. Se isto for verdadeiro, será tirada uma nova imagem e armazenada como o template atual para fins de frame differencing.
set_total_x#
fdiff:set_total_x(integer total_x)
- Parâmetros:
total_xo novo valor para total_x- Valores de Retorno:
nenhum
Define total_x para o pacote framediff.
set_total_y#
fdiff:set_total_y(integer total_y)
- Parâmetros:
total_yo novo valor para total_y- Valores de Retorno:
nenhum
Define total_y para o pacote framediff.
set_threshold#
fdiff:set_threshold(integer threshold)
- Parâmetros:
thresholdO novo valor de limiar- Valores de Retorno:
nenhum
Define o threshold, em número de pixels de diferença, que determina se um frame é considerado «diferente» de outro frame.
swap_templates#
fdiff:swap_templates
- Parâmetros:
nenhum
- Valores de Retorno:
nenhum
Troca o template atual e o anterior nesta estrutura framediff. Esta função coloca o current_template no previous_template, e vice-versa.