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#
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:
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_interestEl 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:
newValueEl 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_xel 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_yel 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:
thresholdEl 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.