Lua API: framediff#

คำอธิบาย#

โครงสร้างข้อมูล framediff เก็บข้อมูลเกี่ยวกับความแตกต่างระหว่างสองเฟรมที่แตกต่างกันที่ถ่ายด้วย CMUcam3 ภายในนั้นเฟรมเหล่านี้ถูกเก็บไว้ในเทมเพลต "current" และ "previous" การเปรียบเทียบระหว่างสองเทมเพลตนั้นทำโดยใช้ framediff_scanline_start, framediff_scanline และ framediff_scanline_finish

ตัวอย่าง#

ตัวอย่างนี้สาธิตการใช้งานโดยใช้ CMUcam3 และการทำ frame differencing มันวนซ้ำ ถ่ายภาพจนกระทั่งภาพหนึ่งแตกต่างจากภาพก่อนหน้า ณ จุดนั้นมันจะบันทึกภาพนั้นลงดิสก์โดยเรียก 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()

พารามิเตอร์:

ไม่มี

ค่าที่ส่งคืน:

แชนเนลที่สนใจสำหรับโครงสร้าง 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 แชนเนลที่สนใจใหม่สำหรับการทำ frame differencing

ค่าที่ส่งคืน:

ไม่มี

ตั้งค่าแชนเนลที่สนใจสำหรับการทำ framedifferencing พารามิเตอร์ channel_of_interest ต้องเป็นหนึ่งในค่าคงที่แชนเนลที่สนใจใน Lua API: ค่าคงที่

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 และในทางกลับกัน