واجهة Lua البرمجية: 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();

المُنشئ#

راجع framediff_new في واجهة Lua البرمجية: الدوال

الطرق#

  • 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 البرمجية: الثوابت للاطلاع على القيم المُعادة المحتملة.

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 البرمجية: الثوابت.

set_load_frame#

fdiff:set_load_frame(boolean newValue)

المعاملات:

newValue القيمة الجديدة

القيم المُعادة:

لا يوجد

يتحكم فيما إذا كان يلزم تحميل إطار جديد خلال الجولة التالية من مقارنة فروق الإطارات. إذا كان هذا صحيحاً، سيتم التقاط صورة جديدة وتخزينها كقالب حالي لأغراض مقارنة فروق الإطارات.

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، والعكس صحيح.