การตัดรูปภาพจากวิดีโอด้วย OpenCV สำหรับ Android

Image placeholder
แวะมาทักทายกันได้

สวัสดีครับบทความนี้จะมาทำต่อจากบทความที่แล้ว ถึงวิธีการแก้ปัญหาที่ผู้เขียนได้กล่าวถึงไว้ในบทความ  บันทึกการตั้งค่าเริ่มต้นของ OpenCV บน Android Studio แบบผู้เริ่มต้น ว่าจะต้องตัดภาพออกมาจาก Video เป็นเฟรมด้วยสกุลไฟล์ Jpeg 


ฝากกดโฆษณา Google Ads สัก click  เพื่อเป็นกำลังใจแก่ผู้เขียนด้วยนะครับ



สิ่งที่จะต้องใช้ สำหรับบทความนี้ได้แก่


ก่อนอื่นจะต้องทราบถึงฟังก์ชันหลักที่เรียกใช้งาน คือ

  • VideoCapture ที่เป็นฟังก์ชัน Core หลักของ OpenCV ที่จะเป็นตัวเรียกไฟล์ Video ที่อยู่ใน Folder ของ Android 
  • Mat เป็นฟังก์ชันสำหรับการสร้าง frame ก็คือ Mat ย่อมาจาก Matric 


ปัญหาที่จะต้องรู้ คือ OpenCV สำหรับ Android จะไม่อ่านไฟล์อื่นๆนอกจาก ไฟล์ Video ที่มี Codec เป็น Mjpeg และถูกห่อด้วย Extension หรือสกุลไฟล์ .avi เท่านั้น ซึ่งถ้าไฟล์ที่ได้เป็น .mp4 มาก็จะไม่สามารถอ่านได้ ดังนั้นพระเอกของเราก็คือ ffmpeg นั้นเองที่จะเข้ามาช่วยในการแปลงไฟล์ให้สามารถใช้งาน OpenCV ได้ เมื่อสังเกตจาก code ด้านล่าง ก็จะเห็นว่ามีการนำไฟล์ Video จาก Folder เป็น Input file มาเข้า FFMPEG เพื่อ Convert จาก mp4 เป็น avi เพื่อให้ OpenCV อ่านได้


https://gist.github.com/skl-songkiat/841f85be8913fa35f81f20d4a9d47149


ผู้เขียนก็จะมี Video file อยู่ตัว 1 ไฟล์ที่ได้ Record ผ่าน Webcam ของ Android box แล้วมาเก็บไว้ที่ SDCard จากนั้น ก็นำไฟล์มาเข้า Process จากตัวอย่างที่เขียนเอาไว้ด้านบน (สามารถดูประกอบกับบทความที่แนบไว้ได้) 

ผลลัพท์ที่ได้ คือ เฟรมที่ได้จากการอ่านของ VideoCapture แล้ว Render ลง Mat เขียนออกมาเป็นไฟล์ Jpeg แต่จะสังเกตได้ว่าวิธีนี้ยังไม่ดีเท่าที่ควรเพราะ Render ลงไฟล์ได้ไม่ครบถ้วนในบางจังหวะ


แวะมาทักทายกันได้
donate