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#

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

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_interest Channel 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:

newValue Nilai 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_x nilai 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_y nilai baru untuk total_y

Nilai Kembalian:

tidak ada

Atur total_y untuk paket framediff.

set_threshold#

fdiff:set_threshold(integer threshold)

Parameter:

threshold Nilai 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.