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

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ớin = 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.

Đổ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ữ

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àucolor
và độ dàythickness
- Dòng 7:
cv2.circle
vẽ hình tròn có tâm ởcenter
, bán kínhradius
, dùng màucolor
và độ dàythickness
- 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àucolor
và độ dàythickness
- Dòng 9:
cv2.putText
thêmtext
ở toạ độorg
, với phông chữfontFace
, cỡ chữfontScale
, dùng màucolor
và độ dàythickness
Leave a comment