OpenCV là một trong những thư viện mã nguồn mở được dùng phổ biến nhất khi làm việc trong mảng thị giác máy tính. Thư viện này cung cấp rất nhiều công cụ thuận tiện cho việc xử lý ảnh và videos.

Hãy cùng điểm lại một số công cụ xử lý ảnh cơ bản trong OpenCV.

Đọc và hiển thị ảnh

Đèn lồng Hội An, ảnh hiển thị bằng OpenCV
1
2
3
4
5
6
7
8
9
10
import cv2


image_path = "images/den_long_hoi_an.jpeg"

# read image
image = cv2.imread(image_path)
# display image
cv2.imshow("Original Image", image)
cv2.waitKey(0)
  • Dòng 1: Load thư viện OpenCV
  • Dòng 7: Đọc ảnh bằng cv2.imread
  • Dòng 9: Hiển thị ảnh bằng cv2.imshow
  • Dòng 10: cv2.waitKey(n) hiển thị ảnh trong n mili giây, với n = 0, hiển thị liên tục cho đến khi ấn phím bất kì

Lưu ảnh ra file

cv2.imwrite("images/new_image.jpeg", image)

Thay đổi độ phân giải

1
2
3
# resize image
new_size = (360, 240)  # (chiều ngang, chiều dọc)
resized_image = cv2.resize(image, dsize=new_size)

Cắt ảnh

1
2
3
4
# crop image
x1, y1 = 100, 100
x2, y2 = 360, 180
crop_image = image[y1:y2, x1:x2]  # cắt từ toạ độ (x1, y1) đến (x2, y2)
  • Dòng 3 : cắt ảnh từ toạ độ (x1, y1) đến (x2, y2), lưu ý là trục y có hướng đi xuống.
OpenCV

Đổi sang ảnh đen trắng

# convert to black & white
# OpenCV processes image in Blue - Green - Red order (BGR, not RGB)
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

Lưu ý : OpenCV lưu file ảnh theo thứ tự BGR (Blue - Green - Red), chứ ko phải RGB. Điều này giải thích tại sao tham số thứ 2 của đoạn code trên là cv2.COLOR_BGR2GRAY.

Làm mờ ảnh

ksize = (10, 10)  # average of area 10 * 10 pixels
blur_image = cv2.blur(image, ksize=ksize)

Đây là ví dụ làm mờ bằng cách lấy giá trị trung bình các điểm ảnh xung quanh. OpenCV còn có một số phương pháp khác như cv2.medianBlur, cv2.GaussianBlur.

Bạn nào thích chụp ảnh thì có thể tham khảo phương pháp này để làm tạo hiệu ứng bokeh xoá phông nhé.

Chèn hình và chữ

Ảnh được chèn hình và chữ : hình vuông với màu xanh da trời, hình tròn màu xanh là cây, đường thẳng màu đỏ và chữ màu xanh là cây
1
2
3
4
5
6
7
8
9
10
# OpenCV processes color BGR order
blue_color = (255, 0, 0)
green_color = (0, 255, 0)
red_color = (0, 0, 255)

# Draw on blur_image
cv2.rectangle(blur_image, pt1=(140, 200), pt2=(220, 280), color=blue_color, thickness=2)
cv2.circle(blur_image, center=(360, 240), radius=40, color=green_color, thickness=4)
cv2.line(blur_image, pt1=(540, 200), pt2=(540, 280), color=red_color, thickness=6)
cv2.putText(blur_image, text="Basic OpenCV", org=(260, 400), fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=1, color=green_color, thickness=2)
  • Dòng 2 - 4 : đặt các biến lưu giá trị color dùng để vẽ hình, lưu ý là OpenCV xử lý theo thứ tự BGR.
  • Dòng 6 : cv2.rectangle vẽ hình chữ nhật từ điểm toạ độ pt1 (point 1) đến điểm toạ độ pt2 (point 2), dùng màu color và độ dày thickness
  • Dòng 7: cv2.circle vẽ hình tròn có tâm ở center, bán kính radius, dùng màu color và độ dày thickness
  • Dòng 8: cv2.line vẽ đường thẳng từ điểm toạ độ pt1 (point 1) đến điểm toạ độ pt2 (point 2), dùng màu color và độ dày thickness
  • Dòng 9: cv2.putText thêm text ở toạ độ org, với phông chữ fontFace, cỡ chữ fontScale, dùng màu color và độ dày thickness

Tham khảo

Leave a comment