Drawing Functions in OpenCV

จาก Morange Wiki

วัตถุประสงค์

  • เรียนรู้การวาดรูปทรงเรคาคณิตที่แตกต่าง ด้วย OpenCV
  • เรียนรู้การใช้ฟังก์ชัน cv2.line(), cv2.circle() , cv2.rectangle(), cv2.ellipse(), cv2.putText()
img ภาพที่คุณต้องการที่จะวาดรูปทรง
สี สีของรูปร่าง สำหรับ BGR ผ่านเป็น tuple เช่น: (255,0,0) สีน้ำเงิน
ความหนา ความหนาของเส้นหรือวงกลม ฯลฯ หาก ** - 1 ** สำหรับตัวเลขเช่นวงกลมมันจะเติมรูปร่าง ความหนาเริ่มต้น = 1
linetype ประเภทของเส่น


Drawing Line
ในการวาดเส่น คุณต้องมีจุดเริ่มต้นและสิ้นสุดของเส้นพิกัด เราจะสร้างภาพสีดำและวาดเส้นสีฟ้าที่ได้จากด้านบนซ้ายมุมล่างขวา

import numpy as np
import cv2

img = np.zeros((512,512,3), np.uint8)
 
cv2.line(img,(0,0),(511,511),(255,0,0),1)


Drawing Rectangle
การวาดรูปสี่เหลี่ยมผืนผ้าคุณต้องมุมบนด้านซ้ายและมุมขวาล่างของรูปสี่เหลี่ยมผืนผ้า ในครั้งนี้เราจะวาดรูปสี่เหลี่ยมผืนผ้าสีแดงที่มุมบนด้านขวาของภาพ

cv2.rectangle(img,(384,0),(510,128),(0,0,255),3)


Drawing Circle
การวาดวงกลมคุณต้องพิกัดศูนย์กลางและรัศมีของมัน เราจะวาดวงกลมภายในสี่เหลี่ยมผืนผ้าวาดดังกล่าวข้างต้น

cv2.circle(img,(447,63), 63, (0,255,0), -1)


Drawing Ellipse
การวาดรูปวงรีที่เราต้องมีที่ตั้งศูนย์กลาง (x, y) ข้อต่อไปคือความยาวแกน (ความยาวแกนหลัก, ความยาวแกนเล็ก ๆ น้อย ๆ ) มุมของการหมุนของวงรีในทิศทางทวนเข็มนาฬิกา startAngle และ endAngle หมายถึงการเริ่มต้นและสิ้นสุดของเส้นโค้งวงรีวัดในทิศทางตามเข็มนาฬิกาจากแกนหลัก นั่นคือการให้ค่า 0 และ 360 ให้เต็มรูปวงรี สำหรับรายละเอียดเพิ่มเติมตรวจสอบเอกสารของ [cv2.ellipse]สำหรับรายละเอียดเพิ่มเติม

cv2.ellipse(img,(256,256),(70,100),0,0,-180,255,-1)


Drawing Polygon
การวาดรูปหลายเหลี่ยมแรกที่คุณต้องพิกัดของจุด ทำให้จุดเหล่านั้นลงในอาร์เรย์ของรูปร่าง ROWSx1x2 ไหนแถว จำนวนของจุดและควรจะเป็นชนิด int32 ที่นี่เราวาดรูปหลายเหลี่ยมเล็ก ๆ มีสี่จุดสีเหลือง

pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))


Adding Text to Images
ที่จะใส่ในตำราภาพที่คุณจะต้องระบุสิ่งต่อไป

  • ข้อมูลที่เป็นข้อความที่คุณต้องการที่จะเขียน
  • พิกัดตำแหน่งของที่คุณต้องการใส่มัน (เช่นมุมซ้ายมุมที่ข้อมูลเริ่มต้น)
  • รูปแบบตัวอักษร (ตรวจสอบ cv2.putText ())
  • ขนาดตัวอักษร (ระบุขนาดของตัวอักษร)
  • สี ความ หนา linetype ฯลฯ สำหรับรูปลักษณ์ที่ดีกว่า linetype = cv2.LINE_AA ขอแนะนำ

เราจะเขียน OpenCV บนภาพของเราในสีขาว

font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'Morange',(10,500), font, 3,(255,255,255),2,cv2.LINE_AA)


มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย
จากโค๊ดด้านล่างจะได้ผลลัท์แบบนี้


import numpy as np
import cv2

#สร้างภาพสีดำ
img = np.zeros((512,512,3), np.uint8)
 
# วาดเส้นทแยงมุมสีฟ้าที่มีความหนา 1 px
cv2.line(img,(0,0),(511,511),(255,0,0),1)
cv2.rectangle(img,(384,0),(510,128),(0,0,255),3)
cv2.circle(img,(447,63), 63, (0,255,0), -1)
cv2.ellipse(img,(256,256),(70,100),0,0,-180,255,-1)
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))


font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'Morange',(10,500), font, 3,(255,255,255),2,cv2.LINE_AA)