Lua API: framediff#

Opis#

Struktura danych framediff przechowuje informacje o różnicy między dwiema różnymi klatkami zrobionymi przez CMUcam3. Wewnętrznie klatki te są przechowywane w szablonie „bieżącym” i „poprzednim”. Porównania między tymi dwoma szablonami wykonuje się za pomocą framediff_scanline_start, framediff_scanline i framediff_scanline_finish.

Przykład#

Ten przykład demonstruje implementację przy użyciu CMUcam3 i różnicowania klatek. Wykonuje pętlę, robiąc zdjęcia, aż jedno zdjęcie będzie różnić się od poprzedniego, w którym to momencie zapisuje to zdjęcie na dysku, wywołując 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();

Konstruktor#

Zobacz framediff_new w Lua API: Funkcje

Metody#

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

Parametry:

brak

Wartości zwracane:

brak

Zapewnia sposób na jawne zwolnienie pamięci związanej z tą strukturą danych framediff zamiast czekania, aż odśmiecacz pamięci (garbage collector) Lua zwolni tę pamięć. Ostrzeżenie: Używanie framediff po wywołaniu na nim dispose prawdopodobnie spowoduje błędy, zdecydowanie zaleca się, aby tego nie robić.

get_coi#

fdiff:get_coi()

Parametry:

brak

Wartości zwracane:

interesujący kanał dla tej struktury framediff.

Pobiera interesujący kanał dla tej struktury. Możliwe wartości zwracane znajdziesz w stałych interesującego kanału w Lua API: Stałe.

get_load_frame#

fdiff:get_load_frame()

Parametry:

brak

Wartości zwracane:

czy chcemy wczytać nową klatkę

Pobiera wartość load_frame dla tego obiektu framediff. load_frame określa, czy trzeba wczytać nową klatkę z CMUcam3 przed wykonaniem jakiegokolwiek różnicowania bieżącego i poprzedniego szablonu.

get_num_pixels#

fdiff:get_num_pixels()

Parametry:

brak

Wartości zwracane:

liczba pikseli różnicy między bieżącym szablonem a poprzednim szablonem

Po użyciu framediff_scanline_start, framediff_scanline i framediff_scanline_finish, wywołaj tę metodę, aby uzyskać liczbę pikseli różnicy, które znaleziono między bieżącym a poprzednim szablonem.

get_template_height#

fdiff:get_template_height()

Parametry:

brak

Wartości zwracane:

wysokość szablonów

Pobiera wysokość szablonów poddawanych różnicowaniu.

get_template_width#

fdiff:get_template_width()

Parametry:

brak

Wartości zwracane:

szerokość szablonów

Pobiera szerokość szablonów poddawanych różnicowaniu.

get_total_x#

fdiff:get_total_x()

Parametry:

brak

Wartości zwracane:

całkowita szerokość do przeanalizowania

Pobiera całkowitą szerokość, zwykle równoważną pixbuf_get_width

get_total_y#

fdiff:get_total_y()

Parametry:

brak

Wartości zwracane:

całkowita wysokość do przeanalizowania

Pobiera całkowitą szerokość, zwykle równoważną pixbuf_get_height

set_coi#

fdiff:set_coi(integer channel_of_interest)

Parametry:

channel_of_interest Nowy interesujący kanał na potrzeby różnicowania klatek

Wartości zwracane:

brak

Ustawia interesujący kanał na potrzeby różnicowania klatek. Parametr channel_of_interest musi być jedną ze stałych interesującego kanału w Lua API: Stałe.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

Parametry:

newValue Nowa wartość

Wartości zwracane:

brak

Kontroluje, czy w trakcie następnej rundy różnicowania klatek trzeba wczytać nową klatkę. Jeśli jest to prawda, zostanie zrobione nowe zdjęcie i zapisane jako bieżący szablon na potrzeby różnicowania klatek.

set_total_x#

fdiff:set_total_x(integer total_x)

Parametry:

total_x nowa wartość dla total_x

Wartości zwracane:

brak

Ustawia total_x dla pakietu framediff.

set_total_y#

fdiff:set_total_y(integer total_y)

Parametry:

total_y nowa wartość dla total_y

Wartości zwracane:

brak

Ustawia total_y dla pakietu framediff.

set_threshold#

fdiff:set_threshold(integer threshold)

Parametry:

threshold Nowa wartość progu

Wartości zwracane:

brak

Ustawia próg, w liczbie pikseli różnicy, który określa, czy jedna klatka jest uznawana za „różną” od innej klatki.

swap_templates#

fdiff:swap_templates

Parametry:

brak

Wartości zwracane:

brak

Zamienia bieżący i poprzedni szablon w tej strukturze framediff. Ta funkcja umieszcza current_template w previous_template i odwrotnie.