Draw image

หัวข้อนี้จะกล่าวถึงการวาดรูปร่างด้วยการใช้คำสั่ง cv2.line, cv2.rectangle และ cv2.circle จะทำการวาดบนภาพพื้นหลังสีดำ ซึ่งการสร้างภาพพื้นหลังจะต้องใช้ Numpy ที่เป็นไลบรารีประมวลผลตัวเลข

Create black background

$ np.zeros(shape, dtype="uint8")

Parameters:

  • shape => กำหนดขนาดของอาร์เรย์

  • dtype => ประเภทข้อมูล

uint8 คือ ข้อมูลตัวเลขที่มีขนาด 8 บิต (0 ถึง 255)

Example:

import cv2
import numpy as np

canvas = np.zeros((300, 300, 3), dtype="uint8")

บรรทัดที่ 4 => สร้างอาร์เรย์ที่เป็น 0 ขนาด 300*300 (สูง*กว้าง) และมีพื้นที่ 3 ช่องสี (RGB)

Line

$ cv2.line(image, start_point, end_point, color, thickness)

Parameters:

  • image => ภาพที่ต้องการวาดเส้น

  • start_point => จุดเริ่มต้นของเส้น โดยจะเขียนในลักษณะคู่อันดับ (x,y)

  • end_point => จุดสิ้นสุดของเส้น โดยจะเขียนอในลักษณะคู่อันดับ (x,y)

  • color => สีของเส้น โดยจะเขียนในลักษณะ tuple และเป็นลำดับสี BGR

    eg: (255, 0, 0) = สีน้ำเงิน

  • thickness => ความหนาของเส้น

Example:

import cv2
import numpy as np

canvas = np.zeros((300, 300, 3), dtype="uint8")

red = (0, 0, 255)
cv2.line(canvas, (300, 0), (0, 300), red, 3)

cv2.imshow("Canvas", canvas)
cv2.waitKey(0)

Circle

$ cv2.circle(image, center_coordinates, radius, color, thickness)

Parameters:

  • image => ภาพที่ต้องการวาดวงกลม

  • center_coordinates => จุดศูนย์กลางของวงกลม โดยจะเขียนอยู่ในลักษณะจุดคู่อันดับ (x,y)

  • radius => รัศมี ขนาดของวงกลม

  • color => สีของเส้น โดยจะเขียนในลักษณะ tuple และเป็นลำดับสี BGR.

    eg: (255, 0, 0) = สีน้ำเงิน

  • thickness => ความหนาของเส้นรอบวงกลม ถ้ากำหนดเป็น -1 จะกลายเป็นวงกลมทึบ

Example:

import cv2
import numpy as np

canvas = np.zeros((300, 300, 3), dtype="uint8")

(centerX, centerY) = (canvas.shape[1] // 2, canvas.shape[0] // 2)
white = (255, 255, 255) 

for r in range(0, 175, 25):        
    
    cv2.circle(canvas, (centerX, centerY), r, white)
    
cv2.imshow("Canvas", canvas)
cv2.waitKey(0)

Rectangle

$ cv2.rectangle(image, start_point, end_point, color, thickness)

Parameters:

  • image => ภาพที่ต้องการวาดสี่เหลี่ยม

  • start_point => จุดเริ่มต้น (มุมซ้ายบน) ของสี่เหลี่ยม โดยจะเขียนอยู่ในลักษณะจุดคู่อันดับ (x,y)

  • end_point => จุดสิ้นสุด (มุมล่างขวา) ของสี่เหลี่ยม โดยจะเขียนอยู่ในลักษณะจุดคู่อันดับ (x,y)

  • color => สีของเส้น โดยจะเขียนในลักษณะ tuple และเป็นลำดับสี BGR

    eg: (255, 0, 0) = สีน้ำเงิน

  • thickness => ความหนาของเส้นรอบสี่เหลี่ยม ถ้ากำหนดเป็น -1 จะกลายเป็นสี่เหลี่ยมทึบทึบ

Example:

import cv2
import numpy as np

canvas = np.zeros((300, 300, 3), dtype="uint8")

blue = (255, 0, 0)
cv2.rectangle(canvas, (0,100), (225, 300), blue, -1)

cv2.imshow("Canvas", canvas)
cv2.waitKey(0)

Text

$ cv2.putText(image, text, org, font, fontScale, color, thickness)

Parameters:

  • image => ภาพที่ต้องการเขียนตัวอักษร

  • text => ข้อความที่ต้องการเขียน

  • org => จุดเริ่มต้นเขียนตัวอักษร โดยเขียนอยู่ในลักษณะจุดคู่อันดับ (x,y)

  • font => ประเภทของตัวอักษร

  • fontScale => ขนาดของตัวอักษร

  • color => สีของเส้น โดยจะเขียนในลักษณะ tuple และเป็นลำดับสี BGR.

    eg: (255, 0, 0) = สีน้ำเงิน

  • thickness => ความหนาของเส้นตัวอักษร

Example:

import cv2
import numpy as np

canvas = np.zeros((300, 300, 3), dtype="uint8")

cv2.putText(canvas, "Hello world!!", (50,50), cv2.FONT_HERSHEY_COMPLEX, 1, (0,255,0),1 )

cv2.imshow("Canvas", canvas)
cv2.waitKey(0)

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