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: פונקציות

מתודות#

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

פרמטרים:

ללא

ערכים מוחזרים:

ערוץ העניין (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, ולהיפך.