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#
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()
- 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_interestLe 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:
newValueLa 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_xla 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_yla 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:
thresholdLa 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.