Lua API: framediff#
תיאור#
מבנה הנתונים framediff מחזיק מידע על ההפרש בין שתי מסגרות שונות שצולמו עם ה-CMUcam3. באופן פנימי, מסגרות אלה מוחזקות בתבנית ”current“ ו-”previous“. השוואות בין שתי התבניות האלה נעשות באמצעות 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();
בנאי#
ראו framediff_new ב-Lua API: פונקציות
מתודות#
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()
- פרמטרים:
ללא
- ערכים מוחזרים:
ערוץ העניין (channel of interest) עבור מבנה framediff זה.
קבל את ערוץ העניין עבור מבנה זה. ראה את הקבועים של ערוץ העניין ב-Lua API: קבועים לערכי ההחזרה האפשריים.
get_load_frame#
fdiff:get_load_frame()
- פרמטרים:
ללא
- ערכים מוחזרים:
האם ברצוננו לטעון פריים חדש או לא
קבל את הערך של load_frame עבור אובייקט framediff זה. 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ערוץ העניין החדש עבור הפרשי פריימים- ערכים מוחזרים:
ללא
הגדירו את ערוץ העניין עבור framedifferencing. הפרמטר 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_xהערך החדש עבור total_x- ערכים מוחזרים:
ללא
הגדירו את total_x עבור מנת ה-framediff.
set_total_y#
fdiff:set_total_y(integer total_y)
- פרמטרים:
total_yהערך החדש עבור total_y- ערכים מוחזרים:
ללא
הגדירו את total_y עבור מנת ה-framediff.
set_threshold#
fdiff:set_threshold(integer threshold)
- פרמטרים:
thresholdערך הסף החדש- ערכים מוחזרים:
ללא
הגדירו את הסף, במספר פיקסלים של הפרש, הקובע האם מסגרת אחת נחשבת ”שונה“ ממסגרת אחרת.
swap_templates#
fdiff:swap_templates
- פרמטרים:
ללא
- ערכים מוחזרים:
ללא
מחליף את התבנית הנוכחית והקודמת במבנה framediff זה. פונקציה זו מכניסה את ה-current_template לתוך ה-previous_template, ולהיפך.