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#

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

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_interest Der 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:

newValue Der 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_x der 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_y der 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:

threshold Der 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.