Các thao tác cơ bản của OpenCV bao gồm vẽ các hình học như đường thẳng, hình tròn, hình chữ nhật, elip, đa giác và văn bản lên hình ảnh. Điều này hữu ích khi cần làm nổi bật vùng quan tâm hoặc thêm chú thích.
Các hàm vẽ chính
- cv2.line() – Vẽ đường thẳng.
- cv2.rectangle() – Vẽ hình chữ nhật.
- cv2.circle() – Vẽ hình tròn.
- cv2.ellipse() – Vẽ elip.
- cv2.polylines() – Vẽ đa giác.
- cv2.putText() – Viết văn bản.
Lưu ý: Màu sắc trong OpenCV sử dụng thứ tự BGR (Blue-Green-Red), không phải RGB.
Tạo ảnh nền đen
import numpy as np
import cv2
my_img = np.zeros((350, 350, 3), dtype="uint8")
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Vẽ đường thẳng – cv2.line()
Tham số: ảnh, điểm đầu (x,y), điểm cuối (x,y), màu BGR, độ dày.
import numpy as np
import cv2
my_img = np.zeros((350, 350, 3), dtype="uint8")
cv2.line(my_img, (202, 220), (100, 160), (0, 20, 200), 10)
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Vẽ hình chữ nhật – cv2.rectangle()
Tham số: ảnh, đỉnh trên-trái (x,y), đỉnh dưới-phải (x,y), màu BGR, độ dày.
import numpy as np
import cv2
my_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)
cv2.waitKey(0)
cv2.destroyAllWindows()

Vẽ hình tròn – cv2.circle()
Tham số: ảnh, tâm (x,y), bán kính, màu BGR, độ dày.
import numpy as np
import cv2
my_img = np.zeros((400, 400, 3), dtype="uint8")
cv2.circle(my_img, (200, 200), 80, (0, 20, 200), 10)
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Vẽ elip – cv2.ellipse()
Tham số: ảnh, tâm (x,y), trục (minor, major), góc xoay, góc bắt đầu, góc kết thúc, màu BGR, độ dày.
import numpy as np
import cv2
my_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)
cv2.waitKey(0)
cv2.destroyAllWindows()

Vẽ đa giác – cv2.polylines()
Tham số: ảnh, mảng tọ độ, đóng đường (True/False), màu, độ dày.
import numpy as np
import cv2
my_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('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Viết văn bản – cv2.putText()
Tham số: ảnh, nội dung, vị trí bắt đầu, font, cỡ chữ, màu, độ dày, kiểu đường nét.
import numpy as np
import cv2
my_img = np.zeros((400, 400, 3), dtype="uint8")
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(my_img, 'Tutorials Point', (50, 50), font, 0.8, (255, 0, 0), 2, cv2.LINE_AA)
cv2.imshow('Window', my_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
