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#

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

newValue O 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_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 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.