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#

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

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

newValue O 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_x o 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_y o 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:

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