Lua API: framediff#
Descrição#
A estrutura de dados framediff contém informações sobre a diferença entre dois quadros diferentes capturados com a CMUcam3. Internamente, esses quadros são mantidos em um template “atual” e “anterior”. As comparações entre esses dois templates são feitas usando framediff_scanline_start, framediff_scanline e framediff_scanline_finish.
Exemplo#
Este exemplo demonstra uma implementação usando a CMUcam3 e a diferenciação de quadros. Ele executa em loop, tirando fotos até que uma foto seja diferente da anterior, momento em que salva essa foto 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 maneira de descartar explicitamente a memória associada a esta estrutura de dados framediff em vez de esperar que o coletor de lixo do Lua descarte essa memória. Aviso: É provável que ocorram erros ao usar um framediff após chamar dispose nele; é altamente recomendável que você 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 possíveis valores de retorno.
get_load_frame#
fdiff:get_load_frame()
- Parâmetros:
nenhum
- Valores de retorno:
se queremos ou não carregar um novo quadro
Obtém o valor de load_frame para este objeto framediff. load_frame determina se precisamos carregar um novo quadro da CMUcam3 antes de realizar qualquer diferenciação dos 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
Após usar 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 sendo diferenciados.
get_template_width#
fdiff:get_template_width()
- Parâmetros:
nenhum
- Valores de Retorno:
a largura dos templates
Obtém a largura dos templates sendo diferenciados.
get_total_x#
fdiff:get_total_x()
- Parâmetros:
nenhum
- Valores de Retorno:
a largura total a ser analisada
Obtém a largura total, geralmente 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, geralmente 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 quadros- Valores de Retorno:
nenhum
Define o canal de interesse para a diferenciação de quadros. O parâmetro channel_of_interest deve 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 quadro precisa ou não ser carregado no decorrer da próxima rodada de diferenciação de quadros. Se isso for verdadeiro, uma nova foto será tirada e armazenada como o template atual para fins de diferenciação de quadros.
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 limiar, em número de pixels de diferença, que determina se um quadro é considerado “diferente” de outro quadro.
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.