Hướng dẫn hàm puttext trong python

  1. Trang chủ
  2. GÓC CÔNG NGHỆ
  3. CÔNG NGHỆ THÔNG TIN
  4. Thị giác máy tính với OpenCV-Python Bài 2, Phần 3: Vẽ các hình cơ bản trên hình ảnh

Hướng dẫn hàm puttext trong python

Thị giác máy tính với OpenCV-Python Bài 2, Phần 3: Vẽ các hình cơ bản trên hình ảnh

16:06 - 09/12/2021

Bài này sẽ hướng dẫn cách vẽ các hình dạng hình học khác nhau với OpenCV qua các hàm: cv2.line(), cv2.circle(), cv2.rectangle(), cv2.ellipse() và cv2.putText().

Trong tất cả các hàm trên, bài này sẽ sử dụng một vài đối số phổ biến sau:

- img: Hình ảnh bạn muốn vẽ các hình dạng hình học lên đó

- color: Màu sắc của hình dạng.

- thickness: Độ dày của nét vẽ. Nếu truyền giá trị “- 1” cho các hình khép kín (như hình tròn), hình dạng đó sẽ được lấp đầy. Độ dày mặc định là 1.

- lineType: Loại nét vẽ.

Vẽ các đường

Để vẽ một đoạn thẳng, cần truyền tọa độ khởi đầu và kết thúc của đoạn thẳng đó. Đoạn code bên dưới sẽ tạo một hình ảnh màu đen và vẽ một đường màu xanh lam trên đó từ góc trên cùng bên trái đến dưới cùng bên phải.

  1. import numpy as np
  2. import cv2
  3. # Create a black image
  4. img = np.zeros((512,512,3), np.uint8)
  5. # Draw a diagonal blue line with thickness of 5 px
  6. cv2.line(img,(0,0),(511,511),(255,0,0),5)

Vẽ hình chữ nhật

Để vẽ một hình chữ nhật, cần truyền tham số về góc trên bên trái và góc dưới bên phải của hình chữ nhật. Đoạn code dưới đây vẽ một hình chữ nhật màu xanh lá cây ở góc trên bên phải của hình ảnh:

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

Vẽ hình tròn

Để vẽ một hình tròn, cần biết tọa độ tâm và bán kính của nó. Đoạn code bên dưới vẽ một hình tròn bên trong hình chữ nhật đã vẽ ở trên.

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

Vẽ hình elip

Để vẽ hình elip, chúng ta cần truyền một vài đối số: một đối số là tọa độ tâm (x, y); đối số tiếp theo là độ dài các trục (độ dài trục chính, độ dài trục phụ); đối số “angle” là góc quay của elip theo hướng ngược chiều kim đồng hồ; đối số “startAngle” và “endAngle” biểu thị điểm bắt đầu và kết thúc của hình elip được đo theo chiều kim đồng hồ từ trục chính, tức là nếu truyền các giá trị 0 và 360 sẽ được đầy đủ hình elip. Ví dụ dưới đây vẽ một nửa hình elip ở giữa hình ảnh:

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

Vẽ đa giác

Để vẽ một đa giác, cần truyền tọa độ các đỉnh. Những điểm đó được biểu diễn thành một mảng có dạng ROWSx1x2, trong đó ROWS là số đỉnh (kiểu int32). Đoạn code dưới đây vẽ một đa giác nhỏ, màu vàng, có bốn đỉnh:

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

Ghi chú

Nếu đối số thứ ba truyền giá trị “False”, sẽ nhận được một hình đa giác nối tất cả các điểm chứ không phải một hình dạng khép kín.

cv2.polylines() có thể được sử dụng để vẽ nhiều đường. Chỉ cần tạo danh sách tất cả các đường cần vẽ và truyền nó vào hàm. Tất cả các đường sẽ được vẽ riêng rẽ. Đó là một cách tốt hơn và nhanh hơn nhiều để vẽ một nhóm các đường so với việc sử dụng cv2.line() cho mỗi đường.

Thêm văn bản vào hình ảnh

Để thêm văn bản vào hình ảnh, cần xác định những nội dung sau.

- Đoạn văn bản muốn viết;

- Tọa độ nơi đặt nó (ứng với góc dưới cùng bên trái, chỗ văn bản bắt đầu);

- Loại phông chữ (Đọc thêm về hàm cv2.putText() để biết các phông chữ được hỗ trợ);

- Kích thước của phông chữ;

- Những thông số khác như màu sắc, độ dày, lineType, ... Để có giao diện đẹp hơn, nên dùng lineType = cv2.LINE_AA.

Đoạn code dưới đây sẽ viết cụm từ “Viện IMC” màu trắng trên hình ảnh đã vẽ:

  1. font = cv2.FONT_HERSHEY_SIMPLEX
  2. cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
  3. cv2.imshow('Bai 2, Phan 3',img)
  4. cv2.waitKey(0)
  5. cv2.destroyAllWindows()

Kết quả cuối cùng nhận được như sau:

Hướng dẫn hàm puttext trong python

 Ở phần tiếp theo chúng ta sẽ tìm hiểu về các thao tác chuột trên hình ảnh.

(Sưu tầm)
VIỆN IMC
Tòa nhà IMC Tower, Số 176 Trường Chinh, Phường Khương
Thượng, Quận Đống Đa, Thành phố Hà Nội, Việt Nam
Tel/Fax : (+84) 24 3566 6232 / 24 3566 6234
Email:    Website: https://imc.org.vn