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()
- 参数:
无
- 返回值:
无
提供一种显式释放与此 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_start、framediff_scanline和framediff_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,反之亦然。