Computer Vision Basics
Last updated
Last updated
Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University
บทเรียนนี้จะกล่าวถึงการใช้งานฟังก์ชันพื้นฐานที่มีอยู่ในไลบารี่ OpenCV เริ่มจากการทำความรู้จักกับฟังก์ชันที่ใช้ในการอ่านภาพ ฟังก์ชันแสดงภาพ ฟังก์ชันบันทึกภาพและฟังก์ชันปรับขนาดภาพ ซึ่งเป็นฟังก์ชันที่สำคัญเมื่อต้องทำงานกับรูปภาพ
หลักการเขียนฟังก์ชันอ่านภาพตามแหล่งที่อยู่ของภาพ
ภาพที่ต้องการใช้อยู่ต่างโฟลเดอร์กับไฟล์ .py
กรณีที่ภาพอยู่คนละที่กับไฟล์ .py หรืออยู่นอกโฟลเดอร์ที่มีไฟล์ .py จะมีหลักการเขียนฟังก์ชันอ่านภาพเพียงแบบเดียว คือ การใช้ path ที่อยู่ของภาพมาใส่ในเครื่องหมาย “…” ดังภาพตัวอย่างต่อไปนี้
2. ภาพที่ต้องการใช้อยู่ในโฟลเดอร์เดียวกันกับไฟล์ .py
กรณีที่ภาพที่ต้องการใช้อยู่ในโฟล์เดอร์เดียวกันกับไฟล์ .py สามารถเขียนฟังก์ชันอ่านภาพได้ 2 แบบ คือ การใช้ path ที่อยู่ของภาพหรือการใช้ชื่อภาพนั้นมาใส่ในเครื่องหมาย “…” ดังภาพตัวอย่างต่อไปนี้
การเขียนฟังก์ชันแสดงภาพบนหน้าจอนั้นจะต้องตั้งชื่อหน้าจอแสดงผลภาพลงในเครื่องหมาย “…” โดยภาพที่ถูกนำมาใช้ในการแสดงจะอยู่หลังเครื่องหมาย , ดังภาพตัวอย่างต่อไปนี้
จากภาพตัวอย่างการแสดงภาพบนหน้าจอจะมีอีกฟังก์ชันหนึ่งที่นำมาใช้คู่กันคือ ฟังก์ชัน waitKey() ฟังก์ชันนี้จะทำหน้าที่ในกำหนดการแสดงผล ค่า 0 ที่อยู่ในฟังก์ชันจะหมายความว่ารอรับ input จากคีย์บอร์ด หรือก็คือ เมื่อผู้ใช้ทำการกดปุ่มใดปุ่มหนึ่งบนคีย์บอร์ด จะส่งผลให้ภาพที่แสดงอยู่หายไป หากไม่ต้องการที่จะให้ภาพหายไปด้วยการกดปุ่มบนคีย์บอร์ด ผู้ใช้สามารถตั้งเวลาที่ภาพจะแสดงผลด้วยการกำหนดค่าอื่นแทนค่า 0 ซึ่งค่าที่ใส่แทนค่า 0 จะทำให้แสดงภาพบนหน้าจอตามเวลาที่กำหนดในหน่วยวินาที
ข้อควรระวัง!
กรณีที่ต้องการแสดงภาพ 2 หน้าต่าง ต้องตั้งชื่อหน้าต่างแสดงผลไม่ซ้ำกัน เพื่อไม่ให้เกิดการซ้อนทับของภาพ
การเขียนฟังก์ชันบันทึกภาพนั้นจะต้องตั้งชื่อภาพและนามสกุลของไฟล์ภาพลงในเครื่องหมาย “…” โดยภาพที่ถูกนำมาใช้ในการบันทึกจะอยู่หลังเครื่องหมาย , ดังภาพตัวอย่างต่อไปนี้
ข้อควรระวัง!
ทุกครั้งที่ต้องการบันทึกภาพใหม่ควรใช้ชื่อภาพที่ไม่ซ้ำกับภาพเดิม หากทำการบันทึกภาพใหม่ด้วยการใช้ชื่อเดิมจะเกิดการซ้อนทับกันของข้อมูล ทำให้ภาพเดิมหายไปและถูกแทนที่ด้วยภาพใหม่
Parameter:
image => ภาพที่ต้องการนำมาใช้
dim => ขนาดภาพที่ต้องการ เขียนในลักษณะคู่อันดับ (ขนาดความกว้าง,ขนาดความสูง)
interpolation => ตัวเลือกการทำงานของฟังก์ชัน resize ประกอบด้วย
INTER_NEAREST
INTER_LINEAR
INTER_AREA
INTER_CUBIC
INTER_LANCZOS4
ตัวอย่างที่ 1
จากภาพตัวอย่างที่ 1 จะเห็นได้ว่าการปรับขนาดของภาพให้มีขนาด 150x200 pixel จะทำให้อัตราส่วนของภาพจะเปลี่ยนไป ภาพที่ได้จึงดูผิดเพี้ยน ดังนั้น ทุกครั้งที่ต้องการปรับขนาดภาพจึงต้องคำนึงถึงอัตราส่วนของภาพ
สมการหาอัตราส่วนของภาพ
ตัวอย่างที่ 2
ตัวอย่างที่ 2 จะทำการปรับขนาดภาพความกว้าง 150 pixel เช่นเดียวกับตัวย่างที่ 1 แต่ความสูงของภาพจะใช้การคำนวณหาอัตราส่วนของภาพเป็นตัวกำหนดค่า เพื่อใช้ภาพผลลัพธ์ในการปรับขนาดไม่ผิดเพี้ยน
ฟังก์ชัน shape คือ ฟังก์ชันที่ใช้การเรียกขนาดของข้อมูลภาพ ซึ่งจะมีลักษณะเป็น array ประกอบด้วย array ของ ความกว้าง(w), ความสูง(h) และจำนวนของสีของภาพในแต่ละ pixel ตามลำดับโดยที่ตำแหน่ง array จะเริ่มต้นที่ 0
นอกจากการใช้คำสั่ง resize ของ OpenCV สามารถปรับขนาดด้วยการใช้ไลบารี่ imutils
ตัวอย่างที่ 3
ความแตกต่างระหว่างหารใช้งาน cv2.resize และ imutils.resize
cv2.resize -> กำหนดขนาดได้ทั้งความกว้างและความสูงพร้อมกัน หากต้องการปรับขนาดภาพให้ได้อัตราส่วนที่เหมาะสม ต้องทำการคำนวณด้วยตนเอง
imutils.resize -> กำหนดค่าความกว้างหรือความสูง อย่างใดอย่างหนึ่ง จากนั้นฟังก์ชันจะทำการคำนวณอัตราส่วนขนาดภาพให้โดยอัตโนมัติ