Computer Vision Basics
บทเรียนนี้จะกล่าวถึงการใช้งานฟังก์ชันพื้นฐานที่มีอยู่ในไลบารี่ OpenCV เริ่มจากการทำความรู้จักกับฟังก์ชันที่ใช้ในการอ่านภาพ ฟังก์ชันแสดงภาพ ฟังก์ชันบันทึกภาพและฟังก์ชันปรับขนาดภาพ ซึ่งเป็นฟังก์ชันที่สำคัญเมื่อต้องทำงานกับรูปภาพ
imread
หลักการเขียนฟังก์ชันอ่านภาพตามแหล่งที่อยู่ของภาพ
ภาพที่ต้องการใช้อยู่ต่างโฟลเดอร์กับไฟล์ .py
กรณีที่ภาพอยู่คนละที่กับไฟล์ .py หรืออยู่นอกโฟลเดอร์ที่มีไฟล์ .py จะมีหลักการเขียนฟังก์ชันอ่านภาพเพียงแบบเดียว คือ การใช้ path ที่อยู่ของภาพมาใส่ในเครื่องหมาย “…” ดังภาพตัวอย่างต่อไปนี้
2. ภาพที่ต้องการใช้อยู่ในโฟลเดอร์เดียวกันกับไฟล์ .py
กรณีที่ภาพที่ต้องการใช้อยู่ในโฟล์เดอร์เดียวกันกับไฟล์ .py สามารถเขียนฟังก์ชันอ่านภาพได้ 2 แบบ คือ การใช้ path ที่อยู่ของภาพหรือการใช้ชื่อภาพนั้นมาใส่ในเครื่องหมาย “…” ดังภาพตัวอย่างต่อไปนี้
imshow
การเขียนฟังก์ชันแสดงภาพบนหน้าจอนั้นจะต้องตั้งชื่อหน้าจอแสดงผลภาพลงในเครื่องหมาย “…” โดยภาพที่ถูกนำมาใช้ในการแสดงจะอยู่หลังเครื่องหมาย , ดังภาพตัวอย่างต่อไปนี้
จากภาพตัวอย่างการแสดงภาพบนหน้าจอจะมีอีกฟังก์ชันหนึ่งที่นำมาใช้คู่กันคือ ฟังก์ชัน waitKey() ฟังก์ชันนี้จะทำหน้าที่ในกำหนดการแสดงผล ค่า 0 ที่อยู่ในฟังก์ชันจะหมายความว่ารอรับ input จากคีย์บอร์ด หรือก็คือ เมื่อผู้ใช้ทำการกดปุ่มใดปุ่มหนึ่งบนคีย์บอร์ด จะส่งผลให้ภาพที่แสดงอยู่หายไป หากไม่ต้องการที่จะให้ภาพหายไปด้วยการกดปุ่มบนคีย์บอร์ด ผู้ใช้สามารถตั้งเวลาที่ภาพจะแสดงผลด้วยการกำหนดค่าอื่นแทนค่า 0 ซึ่งค่าที่ใส่แทนค่า 0 จะทำให้แสดงภาพบนหน้าจอตามเวลาที่กำหนดในหน่วยวินาที
ข้อควรระวัง!
กรณีที่ต้องการแสดงภาพ 2 หน้าต่าง ต้องตั้งชื่อหน้าต่างแสดงผลไม่ซ้ำกัน เพื่อไม่ให้เกิดการซ้อนทับของภาพ
imwrite
การเขียนฟังก์ชันบันทึกภาพนั้นจะต้องตั้งชื่อภาพและนามสกุลของไฟล์ภาพลงในเครื่องหมาย “…” โดยภาพที่ถูกนำมาใช้ในการบันทึกจะอยู่หลังเครื่องหมาย , ดังภาพตัวอย่างต่อไปนี้
ข้อควรระวัง!
ทุกครั้งที่ต้องการบันทึกภาพใหม่ควรใช้ชื่อภาพที่ไม่ซ้ำกับภาพเดิม หากทำการบันทึกภาพใหม่ด้วยการใช้ชื่อเดิมจะเกิดการซ้อนทับกันของข้อมูล ทำให้ภาพเดิมหายไปและถูกแทนที่ด้วยภาพใหม่
resize
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 -> กำหนดค่าความกว้างหรือความสูง อย่างใดอย่างหนึ่ง จากนั้นฟังก์ชันจะทำการคำนวณอัตราส่วนขนาดภาพให้โดยอัตโนมัติ
Last updated