Lua API: framediff#
Deskripsi#
Struktur data framediff menyimpan informasi tentang perbedaan antara dua frame berbeda yang diambil dengan CMUcam3. Secara internal, frame-frame ini disimpan dalam template "current" dan "previous". Perbandingan antara kedua template tersebut dilakukan menggunakan framediff_scanline_start, framediff_scanline dan framediff_scanline_finish.
Contoh#
Contoh ini mendemonstrasikan implementasi menggunakan CMUcam3 dan frame differencing. Ia melakukan loop, mengambil gambar sampai satu gambar berbeda dari yang sebelumnya, pada titik mana ia menyimpan gambar itu ke disk dengan memanggil 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#
Lihat framediff_new di Lua API: Fungsi
Metode#
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()
- Parameter:
tidak ada
- Nilai Kembalian:
tidak ada
Menyediakan cara untuk secara eksplisit membuang memori yang terkait dengan struktur data framediff ini alih-alih menunggu garbage collector Lua membuang memori tersebut. Peringatan: Kesalahan kemungkinan besar akan terjadi dari penggunaan framediff setelah memanggil dispose padanya, sangat disarankan agar Anda tidak melakukannya.
get_coi#
fdiff:get_coi()
- Parameter:
tidak ada
- Nilai Kembalian:
channel of interest untuk struktur framediff ini.
Ambil channel of interest untuk struktur ini. Lihat konstanta channel of interest di Lua API: Konstanta untuk kemungkinan nilai kembalian.
get_load_frame#
fdiff:get_load_frame()
- Parameter:
tidak ada
- Nilai kembalian:
apakah kita ingin memuat frame baru atau tidak
Ambil nilai load_frame untuk objek framediff ini. load_frame menentukan apakah kita perlu memuat frame baru dari CMUcam3 sebelum melakukan differencing apa pun antara template saat ini dan sebelumnya.
get_num_pixels#
fdiff:get_num_pixels()
- Parameter:
tidak ada
- Nilai Kembalian:
jumlah piksel perbedaan antara template saat ini dan template sebelumnya
Setelah menggunakan framediff_scanline_start, framediff_scanline dan framediff_scanline_finish, panggil metode ini untuk mendapatkan jumlah piksel perbedaan yang ditemukan antara template saat ini dan sebelumnya.
get_template_height#
fdiff:get_template_height()
- Parameter:
tidak ada
- Nilai Kembalian:
tinggi template
Ambil tinggi template yang sedang di-difference.
get_template_width#
fdiff:get_template_width()
- Parameter:
tidak ada
- Nilai Kembalian:
lebar template
Ambil lebar template yang sedang di-difference.
get_total_x#
fdiff:get_total_x()
- Parameter:
tidak ada
- Nilai Kembalian:
total lebar yang akan dianalisis
Ambil lebar total, biasanya setara dengan pixbuf_get_width
get_total_y#
fdiff:get_total_y()
- Parameter:
tidak ada
- Nilai Kembalian:
total tinggi yang akan dianalisis
Ambil lebar total, biasanya setara dengan pixbuf_get_height
set_coi#
fdiff:set_coi(integer channel_of_interest)
- Parameter:
channel_of_interestChannel of interest baru untuk frame differencing- Nilai Kembalian:
tidak ada
Atur channel of interest untuk framedifferencing. Parameter channel_of_interest harus salah satu dari konstanta channel of interest di Lua API: Konstanta.
set_load_frame#
fdiff:set_load_frame(boolean newValue)
- Parameter:
newValueNilai baru- Nilai Kembalian:
tidak ada
Mengontrol apakah frame baru perlu dimuat selama putaran berikutnya dari frame differencing. Jika ini true, gambar baru akan diambil dan disimpan sebagai template saat ini untuk keperluan frame differencing.
set_total_x#
fdiff:set_total_x(integer total_x)
- Parameter:
total_xnilai baru untuk total_x- Nilai Kembalian:
tidak ada
Atur total_x untuk paket framediff.
set_total_y#
fdiff:set_total_y(integer total_y)
- Parameter:
total_ynilai baru untuk total_y- Nilai Kembalian:
tidak ada
Atur total_y untuk paket framediff.
set_threshold#
fdiff:set_threshold(integer threshold)
- Parameter:
thresholdNilai threshold baru- Nilai Kembalian:
tidak ada
Atur threshold, dalam jumlah perbedaan piksel, yang menentukan apakah satu frame dianggap "berbeda" dari frame lain.
swap_templates#
fdiff:swap_templates
- Parameter:
tidak ada
- Nilai Kembalian:
tidak ada
Menukar template saat ini dan sebelumnya dalam struktur framediff ini. Fungsi ini menempatkan current_template ke previous_template, dan sebaliknya.