Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Làm việc với hình ảnh trong OpenCV sử dụng Python
OpenCV là một trong những thư viện phổ biến nhất khi làm việc với các bài toán về thị giác máy tính (Computer Vision) hoặc xử lý ảnh (Image Processing). Trước khi áp dụng các bộ lọc hoặc thực hiện bất kỳ thao tác nào liên quan đến hình ảnh, bạn cần biết cách đọc, hiển thị và lưu hình ảnh.

OpenCV cung cấp sẵn các hàm để thực hiện các thao tác cơ bản này. Dưới đây là hướng dẫn chi tiết cách sử dụng chúng.

Đọc hình ảnh trong Python
Để đọc hình ảnh, OpenCV cung cấp hàm cv2.imread().
Cú pháp:
cv2.imread(Pathname, Flag)
Thành phần:
Bài viết này được đăng tại [free tuts .net]
Pathname: Đường dẫn của tệp hình ảnh cần đọc. Nếu hình ảnh không nằm trong cùng thư mục với file mã nguồn, bạn cần chỉ rõ đường dẫn đầy đủ, nếu không sẽ nhận được ma trận rỗng.
Flag: Tùy chọn, xác định cách hình ảnh sẽ được đọc. Có ba loại:
cv2.IMREAD_COLORhoặc1: Đọc hình ảnh ở chế độ màu, bỏ qua kênh alpha (nếu có). Đây là giá trị mặc định, ảnh được lưu dưới dạng BGR 8-bit.cv2.IMREAD_GRAYSCALEhoặc0: Đọc hình ảnh ở chế độ xám (grayscale).cv2.IMREAD_UNCHANGEDhoặc-1: Đọc hình ảnh bao gồm cả kênh alpha nếu tồn tại.
Ví dụ:
img_colored = cv2.imread('dog.jpg', 1)
img_grayscale = cv2.imread('dog.jpg', 0)
img_unchanged = cv2.imread('dog.jpg', -1)
Hình ảnh đọc được sẽ là một đối tượng numpy.ndarray. Để lấy kích thước hình ảnh, bạn dùng thuộc tính .shape:
height, width, num_channels = img_colored.shape print(type(img_colored)) print(height, width, num_channels) # In ra kích thước và số kênh màu # Với hình ảnh grayscale, chỉ có chiều cao và chiều rộng: height, width = img_grayscale.shape
Hiển thị hình ảnh trong Python
Để hiển thị hình ảnh, OpenCV cung cấp hàm cv2.imshow().
Cú pháp:
cv2.imshow(WindowName, Image)
Thành phần:
- WindowName: Tên của cửa sổ hiển thị hình ảnh. Điều này hữu ích khi bạn muốn hiển thị nhiều hình ảnh cùng lúc.
- Image: Hình ảnh cần hiển thị.
Các hàm hỗ trợ:
cv2.waitKey(): Giữ cửa sổ hiển thị trong khoảng thời gian (đơn vị: mili giây). Nếu đặt giá trị là0, cửa sổ sẽ mở vô hạn đến khi bạn nhấn phím bất kỳ.cv2.destroyAllWindows(): Đóng tất cả các cửa sổ hiện có.cv2.destroyWindow(): Đóng một cửa sổ cụ thể (dựa vào tên cửa sổ).
Ví dụ:
img_colored = cv2.imread('dog.jpg', 1)
cv2.imshow('Colored Image', img_colored)
img_grayscale = cv2.imread('dog.jpg', 0)
cv2.imshow('Grayscale Image', img_grayscale)
cv2.waitKey(0) # Chờ nhấn phím
cv2.destroyAllWindows() # Đóng cửa sổ
Lưu hình ảnh trong Python
Để lưu hình ảnh vào máy, OpenCV cung cấp hàm cv2.imwrite().
Cú pháp:
cv2.imwrite(FileName, Image)

Thành phần:
- FileName: Tên tệp tin, bao gồm cả định dạng (ví dụ:
.jpg,.png). - Image: Hình ảnh cần lưu.
Ví dụ:
import cv2
# Đọc và hiển thị hình ảnh
img_gray = cv2.imread('dog.jpg', 0)
cv2.imshow('Grayscale Image', img_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Lưu hình ảnh dưới dạng grayscale
cv2.imwrite('dog_grayscale.jpg', img_gray)

Vẽ hình và thêm chữ vào hình ảnh trong Python
OpenCV hỗ trợ vẽ các hình cơ bản hoặc thêm văn bản vào hình ảnh bằng các hàm sau:
cv2.line(): Vẽ đường thẳng.cv2.rectangle(): Vẽ hình chữ nhật.cv2.circle(): Vẽ hình tròn.cv2.ellipse(): Vẽ hình ellipse.cv2.polylines(): Vẽ đa giác.cv2.putText(): Thêm chữ vào hình ảnh.
Ví dụ:
import numpy as np
import cv2
# Đọc hình ảnh màu
img = cv2.imread('dog.jpg', 1)
height, width, _ = img.shape
# Vẽ các hình
img = cv2.line(img, (0, 0), (width-1, height-1), (255, 0, 0), 5) # Đường chéo màu xanh
img = cv2.rectangle(img, (width//2, 0), (width//2 + 150, 150), (0, 255, 0), 3) # HCN màu xanh lá
img = cv2.circle(img, (447, 63), 63, (0, 0, 255), -1) # Hình tròn màu đỏ
img = cv2.ellipse(img, (width//2, height//2), (100, 50), 0, 0, 180, (0, 0, 255), -1) # Hình ellipse
# Vẽ đa giác
pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32).reshape((-1, 1, 2))
img = cv2.polylines(img, [pts], True, (0, 255, 255))
# Thêm chữ
font = cv2.FONT_ITALIC
cv2.putText(img, 'OpenCV', (10, height-10), font, 4, (255, 255, 255), 3, cv2.LINE_AA)
# Hiển thị ảnh
cv2.imshow('Image with Shapes', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Kết bài
Bài viết trên đã hướng dẫn bạn các thao tác cơ bản với hình ảnh trong OpenCV, bao gồm:
- Đọc, hiển thị và lưu hình ảnh.
- Vẽ các hình và thêm văn bản vào hình ảnh.
Hy vọng đây sẽ là bước khởi đầu thuận lợi cho hành trình khám phá OpenCV của bạn!

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng