Skip to main content

Đọc, ghi và hiển thị ảnh với thư viện OpenCV

Bài viết này hướng dẫn cách thức thực hiện các thao tác cơ bản đầu tiên trên ảnh sử dụng thư viện OpenCV: đọc, ghi và hiển thị. Với các thao tác cơ bản này, bạn sẽ tự tin hơn khi bắt đầu tìm hiểu về lĩnh vực xử lý hình ảnh và thị giác máy tính.

Đọc ảnh

Đầu tiên, ta sẽ khai báo thư viện OpenCV bằng câu lệnh import cv2. Trong đó, cv2 sẽ là tiền tố bắt đầu cho các hàm, lớp đối tượng mình sẽ sử dụng về sau. Thư viện OpenCV sử dụng hàm cv2.imread để đọc ảnh với các tham số cần truyền lần lượt là đường dẫn đến file ảnh với định dạng mà OpenCV hỗ trợ như (BMP, PNG, JPEG) và chế độ đọc ảnh (màu hay mức xám).

import cv2
# Đọc ảnh đầu vào với tên là pandas.png
# Kết quả trả về lưu vào biến img kiểu numpy.array
img = cv2.imread('pandas.png')
# Sau đó ta sẽ thao tác trên ma trận img này như ma trận
print("Cao %d pixel, rong: %d pixel, %d kenh mau." % (img.shape[0], img.shape[1], img.shape[2]))

Kết quả trên màn hình console tương tự như sau (tuỳ kích thước ảnh):

Cao 300 pixel, rong 500 pixel

Lưu ý, tham số thứ hai của cv2.imread là 1 tức là ảnh màu, nếu ta truyền vào 0 thì load ảnh mức xám (không có màu).

import cv2
# Đọc ảnh đầu vào với tên là pandas.png
# Kết quả trả về lưu vào biến img kiểu numpy.array
img = cv2.imread('pandas.png', 0)

Ghi ảnh

Sau khi biến đổi ảnh xong, ta muốn lưu ảnh thì sử dụng hàm cv2.imwrite với tham số đầu vào là đường dẫn đến file cần lưu (hỗ trợ các định dạng BMP, PNG, JPEG,...) và biến chứa ma trận điểm ảnh cần lưu.

import cv2
# Đọc ảnh đầu vào với tên là pandas.png
# Kết quả trả về lưu vào biến img kiểu numpy.array
img = cv2.imread('pandas.png')
# Thực hiện biến đổi trên ma trận img
...
# Hàm imwrite hỗ trợ lưu các định dạng phổ biến như bmp, png, jpeg
cv2.imwrite('/path/to/image/output.bmp', img)

Hiển thị ảnh

Trong quá trình biến đổi ảnh ta muốn xem các kết quả trực tiếp thay vì ghi xuống file thì có thể hiển thị ảnh ngay khi xử lý ảnh. OpenCV có hỗ trợ thao tác hiển thị ảnh như ví dụ sau:

import cv2
# Đọc ảnh đầu vào với tên là pandas.png
# Kết quả trả về lưu vào biến img kiểu numpy.array
img = cv2.imread('pandas.png')
# Thực hiện biến đổi trên ma trận img
...
# Hàm cv2.imshow để hiển thị ảnh
# Tham số đầu tiên là tên cửa sổ để hiển thị ảnh
# Tham số thứ hai là ma trận ảnh
cv2.imshow('Panda image', img)

Hình sau đây minh hoạ khung cửa sổ hiển thị hình ảnh với tiêu đề Panda image.