Lua API: framediff#

Mô Tả#

Cấu trúc dữ liệu framediff giữ thông tin về sự khác biệt giữa hai khung hình khác nhau chụp bằng CMUcam3. Về mặt nội bộ, các khung hình này được giữ trong một mẫu "current" và "previous". Các so sánh giữa hai mẫu đó được thực hiện bằng cách sử dụng framediff_scanline_start, framediff_scanlineframediff_scanline_finish.

Ví Dụ#

Ví dụ này minh họa một cách triển khai sử dụng CMUcam3 và việc lấy hiệu khung hình. Nó lặp lại, chụp ảnh cho đến khi một bức ảnh khác với bức trước, tại thời điểm đó nó lưu bức ảnh đó vào đĩa bằng cách gọi 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();

Hàm Khởi Tạo#

Xem framediff_new trong Lua API: Hàm

Các Phương Thức#

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

Các Tham Số:

không có

Các Giá Trị Trả Về:

không có

Cung cấp một cách để giải phóng bộ nhớ liên quan đến cấu trúc dữ liệu framediff này một cách rõ ràng thay vì chờ bộ thu gom rác Lua giải phóng bộ nhớ đó. Cảnh báo: Các lỗi có khả năng phát sinh từ việc sử dụng một framediff sau khi gọi dispose trên nó, rất khuyến nghị bạn không nên làm như vậy.

get_coi#

fdiff:get_coi()

Các Tham Số:

không có

Các Giá Trị Trả Về:

kênh quan tâm cho cấu trúc framediff này.

Lấy kênh quan tâm cho cấu trúc này. Xem các hằng số kênh quan tâm trong Lua API: Hằng Số để biết các giá trị trả về khả dĩ.

get_load_frame#

fdiff:get_load_frame()

Các Tham Số:

không có

Các giá trị trả về:

liệu chúng ta có muốn nạp một khung hình mới hay không

Lấy giá trị của load_frame cho đối tượng framediff này. load_frame xác định xem chúng ta có cần nạp một khung hình mới từ CMUcam3 trước khi thực hiện bất kỳ việc lấy hiệu nào giữa mẫu hiện tại và mẫu trước đó hay không.

get_num_pixels#

fdiff:get_num_pixels()

Các Tham Số:

không có

Các Giá Trị Trả Về:

số lượng pixel khác biệt giữa mẫu hiện tại và mẫu trước đó

Sau khi sử dụng framediff_scanline_start, framediff_scanlineframediff_scanline_finish, hãy gọi phương thức này để lấy số lượng pixel khác biệt được tìm thấy giữa mẫu hiện tại và mẫu trước đó.

get_template_height#

fdiff:get_template_height()

Các Tham Số:

không có

Các Giá Trị Trả Về:

chiều cao của các mẫu

Lấy chiều cao của các mẫu đang được lấy hiệu.

get_template_width#

fdiff:get_template_width()

Các Tham Số:

không có

Các Giá Trị Trả Về:

chiều rộng của các mẫu

Lấy chiều rộng của các mẫu đang được lấy hiệu.

get_total_x#

fdiff:get_total_x()

Các Tham Số:

không có

Các Giá Trị Trả Về:

tổng chiều rộng cần được phân tích

Lấy tổng chiều rộng, thường tương đương với pixbuf_get_width

get_total_y#

fdiff:get_total_y()

Các Tham Số:

không có

Các Giá Trị Trả Về:

tổng chiều cao cần được phân tích

Lấy tổng chiều rộng, thường tương đương với pixbuf_get_height

set_coi#

fdiff:set_coi(integer channel_of_interest)

Các Tham Số:

channel_of_interest Kênh quan tâm mới cho việc lấy hiệu khung hình

Các Giá Trị Trả Về:

không có

Đặt kênh quan tâm cho việc lấy hiệu khung hình. Tham số channel_of_interest phải là một trong các hằng số kênh quan tâm trong Lua API: Hằng Số.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

Các Tham Số:

newValue Giá trị mới

Các Giá Trị Trả Về:

không có

Điều khiển việc có cần nạp một khung hình mới trong quá trình vòng lấy hiệu khung hình tiếp theo hay không. Nếu điều này đúng, một bức ảnh mới sẽ được chụp và lưu làm mẫu hiện tại cho mục đích lấy hiệu khung hình.

set_total_x#

fdiff:set_total_x(integer total_x)

Các Tham Số:

total_x giá trị mới cho total_x

Các Giá Trị Trả Về:

không có

Đặt total_x cho gói tin framediff.

set_total_y#

fdiff:set_total_y(integer total_y)

Các Tham Số:

total_y giá trị mới cho total_y

Các Giá Trị Trả Về:

không có

Đặt total_y cho gói tin framediff.

set_threshold#

fdiff:set_threshold(integer threshold)

Các Tham Số:

threshold Giá trị ngưỡng mới

Các Giá Trị Trả Về:

không có

Đặt ngưỡng, theo số lượng pixel khác biệt, xác định liệu một khung hình có được coi là "khác" với một khung hình khác hay không.

swap_templates#

fdiff:swap_templates

Các Tham Số:

không có

Các Giá Trị Trả Về:

không có

Hoán đổi mẫu hiện tại và mẫu trước đó trong cấu trúc framediff này. Hàm này đưa current_template vào previous_template, và ngược lại.