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_scanline và framediff_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#
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()
- 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_scanline và framediff_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_interestKê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ố:
newValueGiá 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_xgiá 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_ygiá 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ố:
thresholdGiá 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.