Lua API: framediff#
설명#
framediff 데이터 구조는 CMUcam3로 촬영한 두 개의 서로 다른 프레임 사이의 차이에 대한 정보를 담고 있습니다. 내부적으로, 이 프레임들은 “현재” 및 “이전” 템플릿에 보관됩니다. 이 두 템플릿 간의 비교는 framediff_scanline_start, framediff_scanline 및 framediff_scanline_finish를 사용하여 수행됩니다.
예제#
이 예제는 CMUcam3와 프레임 차분을 사용한 구현을 보여줍니다. 한 사진이 이전 사진과 다를 때까지 사진을 찍으며 반복하고, 그 시점에 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();
생성자#
Lua API: 함수의 framediff_new 참조
메서드#
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()
- 매개변수:
none
- 반환 값:
none
Lua 가비지 컬렉터가 이 framediff 데이터 구조와 관련된 메모리를 해제하기를 기다리는 대신 명시적으로 해제하는 방법을 제공합니다. 경고: framediff에 dispose를 호출한 후 사용하면 오류가 발생할 가능성이 높으므로, 그렇게 하지 않는 것이 강력히 권장됩니다.
get_coi#
fdiff:get_coi()
- 매개변수:
none
- 반환 값:
이 framediff 구조의 관심 채널.
이 구조의 관심 채널을 가져옵니다. 가능한 반환 값은 Lua API: 상수의 관심 채널 상수를 참조하십시오.
get_load_frame#
fdiff:get_load_frame()
- 매개변수:
none
- 반환 값:
새 프레임을 로드할지 여부
이 framediff 객체의 load_frame 값을 가져옵니다. load_frame은 현재 및 이전 템플릿의 차분을 수행하기 전에 CMUcam3에서 새 프레임을 로드해야 하는지를 결정합니다.
get_num_pixels#
fdiff:get_num_pixels()
- 매개변수:
none
- 반환 값:
현재 템플릿과 이전 템플릿 사이의 차이 픽셀 수
framediff_scanline_start, framediff_scanline 및 framediff_scanline_finish를 사용한 후, 이 메서드를 호출하여 현재 템플릿과 이전 템플릿 사이에서 발견된 차이 픽셀 수를 가져오십시오.
get_template_height#
fdiff:get_template_height()
- 매개변수:
none
- 반환 값:
템플릿의 높이
차분되는 템플릿의 높이를 가져옵니다.
get_template_width#
fdiff:get_template_width()
- 매개변수:
none
- 반환 값:
템플릿의 너비
차분되는 템플릿의 너비를 가져옵니다.
get_total_x#
fdiff:get_total_x()
- 매개변수:
none
- 반환 값:
분석할 총 너비
총 너비를 가져옵니다. 일반적으로 pixbuf_get_width와 동일합니다
get_total_y#
fdiff:get_total_y()
- 매개변수:
none
- 반환 값:
분석할 총 높이
총 너비를 가져옵니다. 일반적으로 pixbuf_get_height와 동일합니다
set_coi#
fdiff:set_coi(integer channel_of_interest)
- 매개변수:
channel_of_interest프레임 차분을 위한 새 관심 채널- 반환 값:
none
프레임 차분을 위한 관심 채널을 설정합니다. 매개변수 channel_of_interest는 Lua API: 상수의 관심 채널 상수 중 하나여야 합니다.
set_load_frame#
fdiff:set_load_frame(boolean newValue)
- 매개변수:
newValue새 값- 반환 값:
none
다음 프레임 차분 라운드 중에 새 프레임을 로드해야 하는지 여부를 제어합니다. 이것이 true이면, 새 사진이 촬영되어 프레임 차분 목적의 현재 템플릿으로 저장됩니다.
set_total_x#
fdiff:set_total_x(integer total_x)
- 매개변수:
total_xtotal_x의 새 값- 반환 값:
none
framediff 패킷의 total_x를 설정합니다.
set_total_y#
fdiff:set_total_y(integer total_y)
- 매개변수:
total_ytotal_y의 새 값- 반환 값:
none
framediff 패킷의 total_y를 설정합니다.
set_threshold#
fdiff:set_threshold(integer threshold)
- 매개변수:
threshold새 임계값- 반환 값:
none
한 프레임이 다른 프레임과 “다른” 것으로 간주되는지를 결정하는 임계값을 픽셀 차이 수로 설정합니다.
swap_templates#
fdiff:swap_templates
- 매개변수:
none
- 반환 값:
none
이 framediff 구조에서 현재 템플릿과 이전 템플릿을 교체합니다. 이 함수는 current_template을 previous_template에 넣고, 그 반대도 마찬가지입니다.