Lua API: framediff#

Açıklama#

framediff veri yapısı, CMUcam3 ile çekilmiş iki farklı kare arasındaki fark hakkında bilgi tutar. Dahili olarak, bu kareler bir “current” (mevcut) ve “previous” (önceki) şablonda tutulur. Bu iki şablon arasındaki karşılaştırmalar framediff_scanline_start, framediff_scanline ve framediff_scanline_finish kullanılarak yapılır.

Örnek#

Bu örnek, CMUcam3 ve kare farkı alma kullanan bir uygulamayı gösterir. Bir resim önceki resimden farklı olana kadar döngü halinde resim çeker, bu noktada save_picture çağırarak o resmi diske kaydeder.

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

Yapıcı#

Lua API: Fonksiyonlar içindeki framediff_new fonksiyonuna bakın

Yöntemler#

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

Parametreler:

yok

Dönüş Değerleri:

yok

Bu belleğin Lua çöp toplayıcısı tarafından atılmasını beklemek yerine bu framediff veri yapısıyla ilişkili belleği açıkça atmanın bir yolunu sağlar. Uyarı: Bir framediff üzerinde dispose çağrıldıktan sonra kullanılması muhtemelen hatalara yol açar, bunu yapmamanız kesinlikle önerilir.

get_coi#

fdiff:get_coi()

Parametreler:

yok

Dönüş Değerleri:

bu framediff yapısı için ilgilenilen kanal.

Bu yapı için ilgilenilen kanalı al. Olası dönüş değerleri için Lua API: Sabitler içindeki ilgilenilen kanal sabitlerine bakın.

get_load_frame#

fdiff:get_load_frame()

Parametreler:

yok

Dönüş değerleri:

yeni bir kare yükleyip yüklemek istemediğimiz

Bu framediff nesnesi için load_frame değerini al. load_frame, mevcut ve önceki şablonların farkını almadan önce CMUcam3’ten yeni bir kare yüklememiz gerekip gerekmediğini belirler.

get_num_pixels#

fdiff:get_num_pixels()

Parametreler:

yok

Dönüş Değerleri:

mevcut şablon ile önceki şablon arasındaki fark piksel sayısı

framediff_scanline_start, framediff_scanline ve framediff_scanline_finish kullandıktan sonra, mevcut ve önceki şablon arasında bulunan fark piksellerinin sayısını almak için bu yöntemi çağırın.

get_template_height#

fdiff:get_template_height()

Parametreler:

yok

Dönüş Değerleri:

şablonların yüksekliği

Farkı alınan şablonların yüksekliğini al.

get_template_width#

fdiff:get_template_width()

Parametreler:

yok

Dönüş Değerleri:

şablonların genişliği

Farkı alınan şablonların genişliğini al.

get_total_x#

fdiff:get_total_x()

Parametreler:

yok

Dönüş Değerleri:

analiz edilecek toplam genişlik

Toplam genişliği al, genellikle pixbuf_get_width ile eşdeğerdir

get_total_y#

fdiff:get_total_y()

Parametreler:

yok

Dönüş Değerleri:

analiz edilecek toplam yükseklik

Toplam genişliği al, genellikle pixbuf_get_height ile eşdeğerdir

set_coi#

fdiff:set_coi(integer channel_of_interest)

Parametreler:

channel_of_interest Kare farkı alma için yeni ilgilenilen kanal

Dönüş Değerleri:

yok

Kare farkı alma için ilgilenilen kanalı ayarlayın. channel_of_interest parametresi, Lua API: Sabitler içindeki ilgilenilen kanal sabitlerinden biri olmalıdır.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

Parametreler:

newValue Yeni değer

Dönüş Değerleri:

yok

Bir sonraki kare farkı alma turunda yeni bir karenin yüklenmesi gerekip gerekmediğini kontrol eder. Bu true ise, yeni bir resim çekilir ve kare farkı alma amaçları için mevcut şablon olarak saklanır.

set_total_x#

fdiff:set_total_x(integer total_x)

Parametreler:

total_x total_x için yeni değer

Dönüş Değerleri:

yok

framediff paketi için total_x değerini ayarlayın.

set_total_y#

fdiff:set_total_y(integer total_y)

Parametreler:

total_y total_y için yeni değer

Dönüş Değerleri:

yok

framediff paketi için total_y değerini ayarlayın.

set_threshold#

fdiff:set_threshold(integer threshold)

Parametreler:

threshold Yeni eşik değeri

Dönüş Değerleri:

yok

Bir karenin başka bir kareden “farklı” sayılıp sayılmayacağını belirleyen eşiği, fark piksel sayısı cinsinden ayarlayın.

swap_templates#

fdiff:swap_templates

Parametreler:

yok

Dönüş Değerleri:

yok

Bu framediff yapısındaki mevcut ve önceki şablonu birbiriyle değiştirir. Bu fonksiyon current_template’i previous_template içine koyar ve tersi de geçerlidir.