Lua API: framediff#

설명#

framediff 데이터 구조는 CMUcam3로 촬영한 두 개의 서로 다른 프레임 사이의 차이에 대한 정보를 담고 있습니다. 내부적으로, 이 프레임들은 “현재” 및 “이전” 템플릿에 보관됩니다. 이 두 템플릿 간의 비교는 framediff_scanline_start, framediff_scanlineframediff_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 참조

메서드#

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

매개변수:

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_scanlineframediff_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_x total_x의 새 값

반환 값:

none

framediff 패킷의 total_x를 설정합니다.

set_total_y#

fdiff:set_total_y(integer total_y)

매개변수:

total_y total_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에 넣고, 그 반대도 마찬가지입니다.