Lua API: framediff#

Descripción#

La estructura de datos framediff contiene información sobre la diferencia entre dos fotogramas diferentes tomados con la CMUcam3. Internamente, estos fotogramas se mantienen en una plantilla «actual» y «anterior». Las comparaciones entre esas dos plantillas se realizan usando framediff_scanline_start, framediff_scanline y framediff_scanline_finish.

Ejemplo#

Este ejemplo demuestra una implementación usando la CMUcam3 y la diferenciación de fotogramas. Itera en bucle, tomando fotos hasta que una foto es diferente de la anterior, momento en el que guarda esa foto en el disco llamando a 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();

Constructor#

Consulte framediff_new en Lua API: Funciones

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:

ninguno

Valores de retorno:

ninguno

Proporciona una forma de liberar explícitamente la memoria asociada con esta estructura de datos framediff en lugar de esperar a que el recolector de basura de Lua libere esa memoria. Advertencia: Es probable que se produzcan errores al usar un framediff después de llamar a dispose sobre él; se recomienda encarecidamente que no lo haga.

get_coi#

fdiff:get_coi()

Parámetros:

ninguno

Valores de retorno:

el canal de interés para esta estructura framediff.

Obtiene el canal de interés para esta estructura. Consulte las constantes de canal de interés en Lua API: Constantes para ver los posibles valores de retorno.

get_load_frame#

fdiff:get_load_frame()

Parámetros:

ninguno

Valores de retorno:

si queremos o no cargar un nuevo fotograma

Obtiene el valor de load_frame para este objeto framediff. load_frame determina si necesitamos cargar un nuevo fotograma desde la CMUcam3 antes de hacer cualquier diferenciación de las plantillas actual y anterior.

get_num_pixels#

fdiff:get_num_pixels()

Parámetros:

ninguno

Valores de retorno:

el número de píxeles de diferencia entre la plantilla actual y la plantilla anterior

Después de usar framediff_scanline_start, framediff_scanline y framediff_scanline_finish, llame a este método para obtener el número de píxeles de diferencia que se encontraron entre la plantilla actual y la anterior.

get_template_height#

fdiff:get_template_height()

Parámetros:

ninguno

Valores de retorno:

la altura de las plantillas

Obtiene la altura de las plantillas que se están diferenciando.

get_template_width#

fdiff:get_template_width()

Parámetros:

ninguno

Valores de retorno:

el ancho de las plantillas

Obtiene el ancho de las plantillas que se están diferenciando.

get_total_x#

fdiff:get_total_x()

Parámetros:

ninguno

Valores de retorno:

el ancho total a analizar

Obtiene el ancho total, normalmente equivalente a pixbuf_get_width

get_total_y#

fdiff:get_total_y()

Parámetros:

ninguno

Valores de retorno:

la altura total a analizar

Obtiene el ancho total, normalmente equivalente a pixbuf_get_height

set_coi#

fdiff:set_coi(integer channel_of_interest)

Parámetros:

channel_of_interest El nuevo canal de interés para la diferenciación de fotogramas

Valores de retorno:

ninguno

Establece el canal de interés para la diferenciación de fotogramas. El parámetro channel_of_interest debe ser una de las constantes de canal de interés en Lua API: Constantes.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

Parámetros:

newValue El nuevo valor

Valores de retorno:

ninguno

Controla si es necesario o no cargar un nuevo fotograma en el transcurso de la siguiente ronda de diferenciación de fotogramas. Si esto es verdadero, se tomará una nueva imagen y se almacenará como la plantilla actual para fines de diferenciación de fotogramas.

set_total_x#

fdiff:set_total_x(integer total_x)

Parámetros:

total_x el nuevo valor para total_x

Valores de retorno:

ninguno

Establece total_x para el paquete framediff.

set_total_y#

fdiff:set_total_y(integer total_y)

Parámetros:

total_y el nuevo valor para total_y

Valores de retorno:

ninguno

Establece total_y para el paquete framediff.

set_threshold#

fdiff:set_threshold(integer threshold)

Parámetros:

threshold El nuevo valor del umbral

Valores de retorno:

ninguno

Establece el umbral, en número de píxeles de diferencia, que determina si un fotograma se considera «diferente» de otro fotograma.

swap_templates#

fdiff:swap_templates

Parámetros:

ninguno

Valores de retorno:

ninguno

Intercambia la plantilla actual y la anterior en esta estructura framediff. Esta función pone current_template en previous_template, y viceversa.