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#
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()
- 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_interestKare 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:
newValueYeni 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_xtotal_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_ytotal_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:
thresholdYeni 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.