Lua API:framediff#

说明#

framediff 数据结构保存有关用 CMUcam3 拍摄的两个不同帧之间差异的信息。在内部,这些帧保存在"当前"和"先前"模板中。这两个模板之间的比较使用 framediff_scanline_startframediff_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()

参数:

返回值:

提供一种显式释放与此 framediff 数据结构关联的内存的方法,而不是等待 Lua 垃圾回收器释放该内存。警告: 在对 framediff 调用 dispose 之后再使用它很可能会导致错误,强烈建议您不要这样做。

get_coi#

fdiff:get_coi()

参数:

返回值:

此 framediff 结构的关注通道。

获取此结构的关注通道。有关可能的返回值,请参阅 Lua API:常量 中的关注通道常量。

get_load_frame#

fdiff:get_load_frame()

参数:

返回值:

我们是否想要加载新帧

获取此 framediff 对象的 load_frame 的值。load_frame 决定在对当前模板和先前模板进行任何差分之前,我们是否需要从 CMUcam3 加载新帧。

get_num_pixels#

fdiff:get_num_pixels()

参数:

返回值:

当前模板和先前模板之间的差异像素数

在使用 framediff_scanline_startframediff_scanlineframediff_scanline_finish之后,调用此方法以获取在当前模板和先前模板之间找到的差异像素数量。

get_template_height#

fdiff:get_template_height()

参数:

返回值:

模板的高度

获取正在进行差分的模板的高度。

get_template_width#

fdiff:get_template_width()

参数:

返回值:

模板的宽度

获取正在进行差分的模板的宽度。

get_total_x#

fdiff:get_total_x()

参数:

返回值:

要分析的总宽度

获取总宽度,通常等同于 pixbuf_get_width

get_total_y#

fdiff:get_total_y()

参数:

返回值:

要分析的总高度

获取总宽度,通常等同于 pixbuf_get_height

set_coi#

fdiff:set_coi(integer channel_of_interest)

参数:

channel_of_interest帧差分的新关注通道

返回值:

设置帧差分的关注通道。参数 channel_of_interest 必须是 Lua API:常量 中的关注通道常量之一。

set_load_frame#

fdiff:set_load_frame(boolean newValue)

参数:

newValue新值

返回值:

控制在下一轮帧差分过程中是否需要加载新帧。如果为 true,将拍摄一张新图片并将其存储为用于帧差分的当前模板。

set_total_x#

fdiff:set_total_x(integer total_x)

参数:

total_xtotal_x 的新值

返回值:

为 framediff 数据包设置 total_x。

set_total_y#

fdiff:set_total_y(integer total_y)

参数:

total_ytotal_y 的新值

返回值:

为 framediff 数据包设置 total_y。

set_threshold#

fdiff:set_threshold(integer threshold)

参数:

threshold新的阈值

返回值:

设置阈值(以像素差异数量为单位),用于确定一帧是否被视为与另一帧"不同"。

swap_templates#

fdiff:swap_templates

参数:

返回值:

交换此 framediff 结构中的当前模板和先前模板。此函数将 current_template 放入 previous_template,反之亦然。