Lua-API: framediff#
Beschreibung#
Die framediff-Datenstruktur enthält Informationen über den Unterschied zwischen zwei verschiedenen Frames, die mit der CMUcam3 aufgenommen wurden. Intern werden diese Frames in einem „current“- und einem „previous“-Template gehalten. Vergleiche zwischen diesen beiden Templates werden mit framediff_scanline_start, framediff_scanline und framediff_scanline_finish durchgeführt.
Beispiel#
Dieses Beispiel demonstriert eine Implementierung mit der CMUcam3 und Frame-Differenzierung. Es läuft in einer Schleife und nimmt Bilder auf, bis ein Bild sich vom vorherigen unterscheidet, woraufhin es dieses Bild durch Aufruf von save_picture auf der Festplatte speichert.
-- 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();
Konstruktor#
Siehe framediff_new in Lua-API: Funktionen
Methoden#
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()
- Parameter:
keine
- Rückgabewerte:
keine
Bietet eine Möglichkeit, den mit dieser framediff-Datenstruktur verbundenen Speicher explizit freizugeben, anstatt darauf zu warten, dass der Lua-Garbage-Collector diesen Speicher freigibt. Warnung: Die Verwendung eines framediff nach dem Aufruf von dispose führt wahrscheinlich zu Fehlern, es wird dringend empfohlen, dies nicht zu tun.
get_coi#
fdiff:get_coi()
- Parameter:
keine
- Rückgabewerte:
der Kanal von Interesse für diese framediff-Struktur.
Ruft den relevanten Kanal für diese Struktur ab. Mögliche Rückgabewerte finden Sie bei den Konstanten für den relevanten Kanal in Lua-API: Konstanten.
get_load_frame#
fdiff:get_load_frame()
- Parameter:
keine
- Rückgabewerte:
ob wir einen neuen Frame laden möchten oder nicht
Ruft den Wert von load_frame für dieses framediff-Objekt ab. load_frame bestimmt, ob wir ein neues Bild von der CMUcam3 laden müssen, bevor wir die aktuelle und vorherige Vorlage vergleichen.
get_num_pixels#
fdiff:get_num_pixels()
- Parameter:
keine
- Rückgabewerte:
die Anzahl der Pixel des Unterschieds zwischen dem aktuellen Template und dem vorherigen Template
Rufen Sie nach der Verwendung von framediff_scanline_start, framediff_scanline und framediff_scanline_finish diese Methode auf, um die Anzahl der Pixel zu erhalten, bei denen ein Unterschied zwischen der aktuellen und der vorherigen Vorlage gefunden wurde.
get_template_height#
fdiff:get_template_height()
- Parameter:
keine
- Rückgabewerte:
die Höhe der Templates
Ruft die Höhe der zu vergleichenden Vorlagen ab.
get_template_width#
fdiff:get_template_width()
- Parameter:
keine
- Rückgabewerte:
die Breite der Templates
Ruft die Breite der zu vergleichenden Vorlagen ab.
get_total_x#
fdiff:get_total_x()
- Parameter:
keine
- Rückgabewerte:
die gesamte zu analysierende Breite
Ruft die Gesamtbreite ab, üblicherweise entsprechend pixbuf_get_width
get_total_y#
fdiff:get_total_y()
- Parameter:
keine
- Rückgabewerte:
die gesamte zu analysierende Höhe
Ruft die Gesamtbreite ab, üblicherweise entsprechend pixbuf_get_height
set_coi#
fdiff:set_coi(integer channel_of_interest)
- Parameter:
channel_of_interestDer neue Kanal von Interesse für die Frame-Differenzierung- Rückgabewerte:
keine
Legt den relevanten Kanal für das Framedifferencing fest. Der Parameter channel_of_interest muss einer der Channel-of-Interest-Konstanten in Lua-API: Konstanten sein.
set_load_frame#
fdiff:set_load_frame(boolean newValue)
- Parameter:
newValueDer neue Wert- Rückgabewerte:
keine
Steuert, ob während der nächsten Runde der Frame-Differenzierung ein neuer Frame geladen werden muss oder nicht. Wenn dies wahr ist, wird ein neues Bild aufgenommen und als aktuelles Template für die Zwecke der Frame-Differenzierung gespeichert.
set_total_x#
fdiff:set_total_x(integer total_x)
- Parameter:
total_xder neue Wert für total_x- Rückgabewerte:
keine
Legt total_x für das framediff-Paket fest.
set_total_y#
fdiff:set_total_y(integer total_y)
- Parameter:
total_yder neue Wert für total_y- Rückgabewerte:
keine
Legt total_y für das framediff-Paket fest.
set_threshold#
fdiff:set_threshold(integer threshold)
- Parameter:
thresholdDer neue Schwellenwert- Rückgabewerte:
keine
Legt den Schwellenwert in Anzahl der Pixelunterschiede fest, der bestimmt, ob ein Frame als „unterschiedlich“ gegenüber einem anderen Frame betrachtet wird.
swap_templates#
fdiff:swap_templates
- Parameter:
keine
- Rückgabewerte:
keine
Vertauscht das aktuelle und das vorherige Template in dieser framediff-Struktur. Diese Funktion legt das current_template in das previous_template und umgekehrt.