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_COLOR
hoặ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_GRAYSCALE
hoặc0
: Đọc hình ảnh ở chế độ xám (grayscale).cv2.IMREAD_UNCHANGED
hoặ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!