API Lua : framediff#

Description#

La structure de données framediff contient des informations sur la différence entre deux images différentes prises avec la CMUcam3. En interne, ces images sont conservées dans un modèle « actuel » et un modèle « précédent ». Les comparaisons entre ces deux modèles se font à l’aide de framediff_scanline_start, framediff_scanline et framediff_scanline_finish.

Exemple#

Cet exemple démontre une implémentation utilisant la CMUcam3 et la différenciation d’images. Il boucle, en prenant des photos jusqu’à ce qu’une photo soit différente de la précédente, moment auquel il enregistre cette photo sur le disque en appelant 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();

Constructeur#

Consultez framediff_new dans API Lua : fonctions

Méthodes#

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

Paramètres:

aucun

Valeurs de retour:

aucun

Fournit un moyen de libérer explicitement la mémoire associée à cette structure de données framediff au lieu d’attendre que le ramasse-miettes de Lua libère cette mémoire. Avertissement : l’utilisation d’un framediff après avoir appelé dispose sur celui-ci risque de provoquer des erreurs ; il est fortement recommandé de ne pas le faire.

get_coi#

fdiff:get_coi()

Paramètres:

aucun

Valeurs de retour:

le canal d’intérêt pour cette structure framediff.

Obtient le canal d’intérêt pour cette structure. Consultez les constantes de canal d’intérêt dans API Lua : constantes pour les valeurs de retour possibles.

get_load_frame#

fdiff:get_load_frame()

Paramètres:

aucun

Valeurs de retour:

si nous voulons ou non charger une nouvelle image

Obtient la valeur de load_frame pour cet objet framediff. load_frame détermine si nous devons charger une nouvelle image depuis la CMUcam3 avant d’effectuer toute différenciation des modèles actuel et précédent.

get_num_pixels#

fdiff:get_num_pixels()

Paramètres:

aucun

Valeurs de retour:

le nombre de pixels de différence entre le modèle actuel et le modèle précédent

Après avoir utilisé framediff_scanline_start, framediff_scanline et framediff_scanline_finish, appelez cette méthode pour obtenir le nombre de pixels de différence trouvés entre le modèle actuel et le précédent.

get_template_height#

fdiff:get_template_height()

Paramètres:

aucun

Valeurs de retour:

la hauteur des modèles

Obtient la hauteur des modèles en cours de différenciation.

get_template_width#

fdiff:get_template_width()

Paramètres:

aucun

Valeurs de retour:

la largeur des modèles

Obtient la largeur des modèles en cours de différenciation.

get_total_x#

fdiff:get_total_x()

Paramètres:

aucun

Valeurs de retour:

la largeur totale à analyser

Obtient la largeur totale, généralement équivalente à pixbuf_get_width

get_total_y#

fdiff:get_total_y()

Paramètres:

aucun

Valeurs de retour:

la hauteur totale à analyser

Obtient la largeur totale, généralement équivalente à pixbuf_get_height

set_coi#

fdiff:set_coi(integer channel_of_interest)

Paramètres:

channel_of_interest Le nouveau canal d’intérêt pour la différence d’images

Valeurs de retour:

aucun

Définit le canal d’intérêt pour la différenciation d’images. Le paramètre channel_of_interest doit être l’une des constantes de canal d’intérêt dans API Lua : constantes.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

Paramètres:

newValue La nouvelle valeur

Valeurs de retour:

aucun

Détermine si une nouvelle image doit ou non être chargée lors du prochain cycle de différenciation d’images. Si cette valeur est vraie, une nouvelle photo sera prise et stockée comme modèle actuel à des fins de différenciation d’images.

set_total_x#

fdiff:set_total_x(integer total_x)

Paramètres:

total_x la nouvelle valeur de total_x

Valeurs de retour:

aucun

Définit total_x pour le paquet framediff.

set_total_y#

fdiff:set_total_y(integer total_y)

Paramètres:

total_y la nouvelle valeur de total_y

Valeurs de retour:

aucun

Définit total_y pour le paquet framediff.

set_threshold#

fdiff:set_threshold(integer threshold)

Paramètres:

threshold La nouvelle valeur de seuil

Valeurs de retour:

aucun

Définit le seuil, en nombre de pixels de différence, qui détermine si une image est considérée comme « différente » d’une autre image.

swap_templates#

fdiff:swap_templates

Paramètres:

aucun

Valeurs de retour:

aucun

Échange le modèle actuel et le modèle précédent dans cette structure framediff. Cette fonction place le current_template dans le previous_template, et vice versa.