Sunday, September 6, 2015

การประมวลผลภาพโดยการสะท้อน (Mirror) และการจับภาพจากวิดีโอเฟรมของ Kinect ตอนที่ 2

ตอนที่แล้ว เราเขียนโค้ดเพื่อทำ mirror effect ให้กับวิดีโอ ดังนี้

มาดูคำอธิบายคร่าวๆกันครับ

Method หลักก็จะมี 4 Method ด้วยกันดังนี้

1. Window_Loaded()
อันนี้ก็ตามชื่อ เมื่อหน้าต่างถูกโหลดขึ้นมาเรียบร้อย ก็ไปเรียก Video Event ของ Kinect เพื่อตรวจสอบว่าวิดีโอพร้อมหรือไม่ ถ้าพร้อมก็เรียก Method ในการแสดงผลเพื่อเอาข้อมูลภาพมาแสดงบน Image UI ที่เตรียมไว้

2. myKinect_ColorFrameReady()
ซึ่งจะถูกเรียกจาก Window_Loaded()
ใน Method นี้ก็ทำการอ่านค่าวิดีโอจาก Kinect รวมถึงประมวลผลภาพต่างๆ แล้วแสดงผลบน Image UI

นอกจากนี้ ยังมีการตรวจสอบว่า Checkbox ถูกเลือกหรือไม่ รวมถึงมีการกดปุ่มบันทึกภาพหรือไม่

3. reflectImage()
Method นี้เป็นกระบวนการประมวลผลภาพแบบ Mirror โดยมีหลักการดังนี้
3.1 ได้ข้อมูลภาพจาก Kinect มาเป็นแบบ byte array
3.2 เอาพอยน์เตอร์ pImage ไปชี้ไว้ที่ตำแหน่งเริ่มต้นของ array
3.3 วนลูปสำหรับทุกแถว
   3.3.1 ให้พอยน์เตอร์ pStart ชี้ที่หัวแถว และ pEnd ชี้ที่ท้ายแถว
   3.3.2 เปลี่ยนค่าใน array ณ ตำแหน่งที่ pEnd ชี้อยู่ ให้มีค่าเท่ากับค่าในตำแหน่งที่ pStart ชี้อยู่ (ทำ Mirror นั่นเอง)
   3.3.3 ขยับ pStart ไปคอลัมน์ถัดไป และ ถอย pEnd มายังคอลัมน์ก่อนหน้า
   3.3.4 ทำจนกระทั่ง pStart ชี้ที่เดียวกับ pEnd จึงไปเริ่มต้นใหม่ในแถวถัดไป


4. onSave()
อันนี้ก็สร้าง dialog มาถามว่าจะบันทึกไฟล์ชื่ออะไร ที่ไหน แล้ว encode array ให้เป็นรูป รวมถึงเขียนไฟล์

โดยรวมก็ประมาณนี้ครับ

No comments:

Post a Comment