Ở bài trước mình đã hướng dẩn các bạn các bước để bắt đầu với một video, hướng dẩn load video từ camera, chạy một video từ file và cách lưu lại video đó như thế nào. Và ở bài viết tiếp theo này mình sẽ hướng dẩn về cách vẻ các hình, ký thự lên một bức ảnh hay video như thế nào nhé.

I. Giới thiệu.

Trong các bài viết hướng dẩn về OpenCV với Python, tôi sẽ giới thiệu cách vẽ nhiều hình dạng khác nhau trên hình ảnh và video của bạn. Nó khá phổ biến để đánh dấu các đối tượng đã phát hiện theo một cách nào đó, vì vậy chúng ta có thể dễ dàng nhìn thấy nếu các chương trình của chúng ta đang hoạt động như kỳ vọng.

II. Drawing and Writing

1. Ví dụ.

Một ví dụ về điều này sẽ là một trong những hình ảnh được hiển thị trước đây:
IMG

2. Hướng dẫn.

Đối với ví dụ tạm thời này, tôi sẽ sử dụng hình ảnh sau:

Bạn được khuyến khích sử dụng hình ảnh của riêng bạn. Như thường lệ, mã khởi đầu của chúng ta có thể là như sau:

import numpy as np
import cv2

img = cv2.imread('watch.jpg',cv2.IMREAD_COLOR)

Tiếp theo, chúng ta có thể bắt đầu vẽ như:

cv2.line(img,(0,0),(150,150),(255,255,255),15)

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Với lệnh cv2.line () lấy các thông số sau đây: ở đâu, tọa độ bắt đầu, tọa độ kết thúc, màu sắc (bgr), chiều dày đường.
Kết quả ở đây:


Thật tốt, chúng ta hãy thử cùng với một số hình dạng khác.
Tiếp theo, một hình chữ nhật:

cv2.rectangle(img,(15,25),(200,150),(0,0,255),15)

Các thông số ở đây là hình ảnh, tọa độ trái, tọa độ bên dưới bên phải, màu sắc, và độ dày đường.
Làm thế nào về một vòng tròn?

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

Các thông số ở đây là hình ảnh / khung, trung tâm của vòng tròn, bán kính, màu sắc, và sau đó độ dày.
Lưu ý rằng chúng ta có độ dày -1. Điều này có nghĩa là đối tượng sẽ thực sự được điền vào, vì vậy chúng tôi sẽ có một vòng tròn đầy.
Các đường, hình chữ nhật và hình tròn đều vẽ được và vẻ được tất cả, nếu chúng ta muốn một hình ngũ giác, hoặc hình bát giác, hoặc hình bát giác ?!
Không vấn đề gì!

pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
# OpenCV documentation had this code, which reshapes the array to a 1 x 2. I did not 
# find this necessary, but you may:
#pts = pts.reshape((-1,1,2))
cv2.polylines(img, [pts], True, (0,255,255), 3)

Đầu tiên, chúng ta đặt tên các điểm, viết tắt của các điểm, như một mảng các tọa độ numpy.
Sau đó, chúng ta sử dụng cv2.polylines để vẽ các đường kẻ.
Các thông số như sau: đối tượng được vẽ đến, tọa độ, chúng ta nên "kết nối" dấu chấm đầu cuối và bắt đầu, màu sắc, và một lần nữa độ dày.
Điều cuối cùng bạn có thể muốn làm là viết trên hình ảnh.
Điều này có thể được thực hiện như sau:

font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV Tuts!',(0,130), font, 1, (200,255,155), 2, cv2.LINE_AA)

Mã đầy đủ đến thời điểm này sẽ là một cái gì đó như:

import numpy as np
import cv2

img = cv2.imread('watch.jpg',cv2.IMREAD_COLOR)
cv2.line(img,(0,0),(200,300),(255,255,255),50)
cv2.rectangle(img,(500,250),(1000,500),(0,0,255),15)
cv2.circle(img,(447,63), 63, (0,255,0), -1)
pts = np.array([[100,50],[200,300],[700,200],[500,100]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img, [pts], True, (0,255,255), 3)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV Tuts!',(10,500), font, 6, (200,255,155), 13, cv2.LINE_AA)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. Kết quả.

Và kết quả cuối cùng :

III. Tài liệu tham khảo.

http://docs.opencv.org/
https://techmaster.vn/
https://pythonprogramming.net/

Trong hướng dẫn tiếp theo, chúng tôi sẽ bao gồm các hoạt động hình ảnh cơ bản mà chúng tôi có thể thực hiện.