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#
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()
- 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_interestNowy 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:
newValueNowa 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_xnowa 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_ynowa wartość dla total_y- Wartości zwracane:
brak
Ustawia total_y dla pakietu framediff.
set_threshold#
fdiff:set_threshold(integer threshold)
- Parametry:
thresholdNowa 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.