การทำงานพื้นฐานของ OpenCV คือการวาดภาพทับ ความสามารถในการเพิ่มรูปทรงเรขาคณิตต่างๆ เช่น เส้น วงกลม และสี่เหลี่ยมผืนผ้า เป็นต้น
บ่อยครั้งที่ทำงานกับการวิเคราะห์ภาพ เราต้องการเน้นส่วนของภาพ เช่น โดยการเพิ่มสี่เหลี่ยมผืนผ้าที่กำหนดส่วนนั้น เป็นตัวอย่างลูกศรเพื่อระบุบางสิ่งด้วย
cv2.line() - ฟังก์ชันนี้ใช้เพื่อวาดเส้นบนรูปภาพ
cv2.rectangle() - ฟังก์ชันนี้ใช้เพื่อวาดรูปสี่เหลี่ยมผืนผ้าบนรูปภาพ
cv2.circle() - ฟังก์ชันนี้ใช้วาดวงกลมบนรูปภาพ
cv2.putText() - ฟังก์ชันนี้ใช้สำหรับเขียนข้อความบนรูปภาพ
cv2.ellipse() - ฟังก์ชันนี้ใช้เพื่อวาดวงรีบนรูปภาพ
โค้ดตัวอย่าง
นำเข้า numpy เป็น npimport cv2my_img =np.zeros((350, 350, 3), dtype ="uint8")cv2.imshow('Window', my_img)cv2.waitKey(0)cv2.destroyAllWindows()ก่อน>ผลลัพธ์
การวาดเส้น
สำหรับการวาดเส้น cv2.line() จะใช้ฟังก์ชัน ฟังก์ชันนี้รับห้าอาร์กิวเมนต์
- วัตถุรูปภาพที่จะวาด
- พิกัดจุดเริ่มต้น (x, y)
- พิกัดจุดสิ้นสุด (x, y)
- สีสโตรคใน BGR (ไม่ต้องระบุ RGB)
- ความหนาของเส้น (เป็นพิกเซล)
โค้ดตัวอย่าง
นำเข้า numpy เป็น npimport cv2my_img =np.zeros((350, 350, 3), dtype ="uint8")# กำลังสร้างสำหรับ linecv2.line(my_img, (202, 220), (100, 160), (0 , 20, 200), 10)cv2.imshow('หน้าต่าง', my_img)cv2.waitKey(0)cv2.destroyAllWindows()
ผลลัพธ์
การวาดรูปสี่เหลี่ยมผืนผ้า
สำหรับการวาดรูปสี่เหลี่ยมผืนผ้าจะใช้ฟังก์ชัน cv2.rectangle() ฟังก์ชันนี้ยอมรับพารามิเตอร์อินพุตห้าตัว
- วัตถุรูปภาพที่จะวาด
- พิกัดของจุดยอดด้านซ้ายบน (x, y)
- พิกัดของจุดยอดขวาล่าง (x, y)
- สีสโตรคใน BGR (ไม่ต้องระบุ RGB)
- ความหนาของเส้น (เป็นพิกเซล)
โค้ดตัวอย่าง
นำเข้า numpy เป็น npimport cv2my_img =np.zeros((400, 400, 3), dtype ="uint8")# การสร้างสี่เหลี่ยมผืนผ้าcv2.rectangle(my_img, (30, 30), (300, 200), (0 , 20, 200), 10)cv2.imshow('Window', my_img)# ช่วยให้เราเห็นภาพ# จนกระทั่งปิดอย่าง Forcelycv2.waitKey(0)cv2.destroyAllWindows()
ผลลัพธ์
การวาดวงกลม
สำหรับการวาดวงกลม ใช้ฟังก์ชัน cv2.circle() ฟังก์ชันนี้ยอมรับพารามิเตอร์อินพุตห้าตัว
- วัตถุรูปภาพที่จะวาด
- พิกัดศูนย์ (x, y)
- รัศมีของวงกลม
- สีสโตรคใน BGR (ไม่ต้องระบุ RGB)
- ความหนาของเส้น (เป็นพิกเซล)
โค้ดตัวอย่าง
นำเข้า numpy เป็น npimport cv2my_img =np.zeros((400, 400, 3), dtype ="uint8")# กำลังสร้าง circlecv2.circle(my_img, (200, 200), 80, (0, 20, 200) , 10)cv2.imshow('Window', my_img)cv2.waitKey(0)cv2.destroyAllWindows()
ผลลัพธ์
การวาดวงรี
สำหรับการวาดวงรีจะใช้ฟังก์ชัน cv2.ellipse() ฟังก์ชันนี้ยอมรับพารามิเตอร์อินพุตแปดตัว
- วัตถุรูปภาพที่จะวาดภาพ
- พิกัดศูนย์ (x, y)
- ความยาวของแกนรองและแกนหลัก (h, w)
- มุมการหมุนของวงรี (คำนวณทวนเข็มนาฬิกา)
- มุมเริ่มต้น (คำนวณตามเข็มนาฬิกา)
- มุมสุดท้าย (คำนวณตามเข็มนาฬิกา)
- สีสโตรกใน BGR (ไม่ระบุ RGB)
- ความหนาของจังหวะ
โค้ดตัวอย่าง
นำเข้า numpy เป็น npimport cv2my_img =np.zeros((400, 400, 3), dtype ="uint8")# กำลังสร้างสำหรับสี่เหลี่ยมผืนผ้าcv2.ellipse(my_img,(256,256),(100,50),0,0,180,255, -1)cv2.imshow('Window', my_img)# ช่วยให้เราเห็นภาพ# จนกระทั่งปิดอย่าง Forcelycv2.waitKey(0)cv2.destroyAllWindows()
ผลลัพธ์
การวาดรูปหลายเหลี่ยม
สำหรับการวาดรูปหลายเหลี่ยมจะใช้ฟังก์ชัน cv2.polylines() ฟังก์ชันนี้ต้องการอาร์กิวเมนต์ห้าจำนวน
- วัตถุรูปภาพที่จะวาด
- อาร์เรย์ของพิกัด
- จริงครับ ถ้าเป็นเส้นปิด
- สีสโตรก
- ความหนาของจังหวะ
โค้ดตัวอย่าง
นำเข้า numpy เป็น npimport cv2my_img =np.zeros((400, 400, 3), dtype ="uint8")pts =np.array([[10,5],[20,30],[70,20 ],[50,10]], np.int32)pts =pts.reshape((-1,1,2))cv2.polylines(my_img,[pts],True,(0,255,255))cv2.imshow('หน้าต่าง ', my_img)cv2.waitKey(0)cv2.destroyAllWindows()
เอาท์พุต
การวาดข้อความ
ในการเขียนข้อความด้วย OpenCV มีฟังก์ชัน cv2.putText() ที่ยอมรับอาร์กิวเมนต์จำนวนหนึ่ง
- ภาพที่จะวาด
- ข้อความที่จะเขียน
- พิกัดของจุดเริ่มต้นข้อความ
- ฟอนต์ที่จะใช้
- ขนาดตัวอักษร
- สีข้อความ
- ความหนาของข้อความ
- ประเภทของสายที่ใช้
โค้ดตัวอย่าง
นำเข้า numpy เป็น npimport cv2my_img =np.zeros ((400, 400, 3), dtype ="uint8")# การเขียน textfont =cv2.FONT_HERSHEY_SIMPLEXcv2.putText(my_img, 'Tutorials Point', (50, 50), แบบอักษร 0.8, (255, 0, 0), 2, cv2.LINE_AA)cv2.imshow('Window', my_img)cv2.waitKey(0)cv2.destroyAllWindows()