Rate this post

Bài viết này sẽ hướng dẫn bạn cách thực hiện các thao tác cơ bản trên hình ảnh sử dụng OpenCV, bao gồm đọc và hiển thị hình ảnh, thay đổi kích thước, cắt (crop), xoay, và chuyển đổi màu sắc của hình ảnh. Bạn sẽ học cách sử dụng các hàm cơ bản của OpenCV để xử lý hình ảnh, cùng với các ví dụ minh họa cụ thể.

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

Hàm cv2.imread()

Hàm cv2.imread() được sử dụng để đọc một hình ảnh từ tệp tin. Cú pháp của hàm này như sau:

cv2.imread(filename, flags)

Trong đó:

  • filename: Đường dẫn đến tệp tin hình ảnh.
  • flags: Tham số tùy chọn để xác định cách đọc hình ảnh. Một số giá trị thường dùng:
  • cv2.IMREAD_COLOR: Đọc hình ảnh màu (mặc định).
  • cv2.IMREAD_GRAYSCALE: Đọc hình ảnh ở chế độ xám.
  • cv2.IMREAD_UNCHANGED: Đọc hình ảnh với kênh alpha.

Hàm cv2.imshow()

Hàm cv2.imshow() được sử dụng để hiển thị hình ảnh trong một cửa sổ. Cú pháp của hàm này như sau:

cv2.imshow(window_name, image)

Trong đó:

  • window_name: Tên của cửa sổ hiển thị.
  • image: Hình ảnh cần hiển thị.

Ví dụ đọc và hiển thị hình ảnh

import cv2

# Đọc hình ảnh màu
image = cv2.imread('path/to/image.jpg', cv2.IMREAD_COLOR)

# Hiển thị hình ảnh
cv2.imshow('Image', image)

# Đợi phím bất kỳ để đóng cửa sổ
cv2.waitKey(0)
cv2.destroyAllWindows()

Thay đổi kích thước hình ảnh

Hàm cv2.resize()

Hàm cv2.resize() được sử dụng để thay đổi kích thước của hình ảnh. Cú pháp của hàm này như sau:

cv2.resize(src, dsize, fx=0, fy=0, interpolation=cv2.INTER_LINEAR)

Trong đó:

  • src: Hình ảnh đầu vào.
  • dsize: Kích thước mới của hình ảnh (width, height).
  • fx, fy: Hệ số thay đổi kích thước theo chiều ngang và dọc.
  • interpolation: Phương pháp nội suy. Một số giá trị thường dùng:
  • cv2.INTER_LINEAR: Nội suy tuyến tính (mặc định).
  • cv2.INTER_NEAREST: Nội suy gần nhất.
  • cv2.INTER_AREA: Sử dụng nội suy khu vực.
  • cv2.INTER_CUBIC: Nội suy bicubic.

Ví dụ thay đổi kích thước hình ảnh

# Thay đổi kích thước hình ảnh
resized_image = cv2.resize(image, (800, 600))

# Hiển thị hình ảnh đã thay đổi kích thước
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Cắt (crop) hình ảnh

Sử dụng slicing của NumPy

Bạn có thể cắt một phần của hình ảnh bằng cách sử dụng slicing của NumPy.

Ví dụ cắt hình ảnh

# Cắt một phần của hình ảnh
cropped_image = image[50:200, 100:300]

# Hiển thị hình ảnh đã cắt
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Xoay hình ảnh

Hàm cv2.getRotationMatrix2D()

Hàm cv2.getRotationMatrix2D() được sử dụng để tạo ra một ma trận xoay 2D. Cú pháp của hàm này như sau:

cv2.getRotationMatrix2D(center, angle, scale)

Trong đó:

  • center: Tọa độ của tâm xoay (x, y).
  • angle: Góc xoay tính bằng độ.
  • scale: Hệ số tỉ lệ, mặc định là 1.

Hàm cv2.warpAffine()

Hàm cv2.warpAffine() được sử dụng để áp dụng một phép biến đổi hình học lên hình ảnh. Cú pháp của hàm này như sau:

cv2.warpAffine(src, M, dsize)

Trong đó:

  • src: Hình ảnh đầu vào.
  • M: Ma trận biến đổi 2×3.
  • dsize: Kích thước của hình ảnh đầu ra (width, height).

Ví dụ xoay hình ảnh

# Tính toán tâm xoay
(h, w) = image.shape[:2]
center = (w // 2, h // 2)

# Tạo ma trận xoay
M = cv2.getRotationMatrix2D(center, 45, 1.0)

# Áp dụng phép biến đổi hình học
rotated_image = cv2.warpAffine(image, M, (w, h))

# Hiển thị hình ảnh đã xoay
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Chuyển đổi màu sắc hình ảnh

Hàm cv2.cvtColor()

Hàm cv2.cvtColor() được sử dụng để chuyển đổi màu sắc của hình ảnh. Cú pháp của hàm này như sau:

cv2.cvtColor(src, code)

Trong đó:

  • src: Hình ảnh đầu vào.
  • code: Mã chuyển đổi màu sắc. Một số giá trị thường dùng:
  • cv2.COLOR_BGR2GRAY: Chuyển đổi từ màu BGR sang xám.
  • cv2.COLOR_BGR2RGB: Chuyển đổi từ màu BGR sang RGB.

Ví dụ chuyển đổi màu sắc hình ảnh

# Chuyển đổi hình ảnh màu sang hình ảnh xám
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Hiển thị hình ảnh xám
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Các tính năng nâng cao và mẹo sử dụng

Xử lý ảnh hàng loạt

Bạn có thể tạo một script để xử lý nhiều hình ảnh cùng lúc, áp dụng các thao tác như thay đổi kích thước, cắt, xoay, và chuyển đổi màu sắc cho toàn bộ thư mục hình ảnh.

Tích hợp với các thư viện khác

OpenCV có thể được kết hợp với các thư viện khác như NumPy, Matplotlib để thực hiện các thao tác phức tạp hơn và hiển thị kết quả một cách trực quan hơn.

Lưu ý và xử lý lỗi

Xử lý lỗi khi đọc hình ảnh

Nếu hình ảnh không được đọc thành công, cv2.imread() sẽ trả về None. Bạn nên kiểm tra kết quả đọc hình ảnh trước khi xử lý tiếp.

if image is None:
    print('Không thể đọc hình ảnh')
    exit()

Đảm bảo đường dẫn chính xác

Kiểm tra kỹ đường dẫn đến tệp tin hình ảnh để đảm bảo rằng tệp tin tồn tại và có thể truy cập được.

Kết luận

Trong bài viết này, bạn đã học cách thực hiện các thao tác cơ bản trên hình ảnh sử dụng OpenCV, bao gồm đọc và hiển thị hình ảnh, thay đổi kích thước, cắt, xoay, và chuyển đổi màu sắc của hình ảnh.

Các thao tác cơ bản này là nền tảng quan trọng trong xử lý hình ảnh và thị giác máy tính, giúp bạn dễ dàng thao tác và phân tích dữ liệu hình ảnh.

Để nắm vững kỹ năng sử dụng các thao tác cơ bản trên hình ảnh trong OpenCV, bạn nên thực hành qua các bài tập và dự án nhỏ như xử lý ảnh cá nhân, phát triển các ứng dụng chỉnh sửa ảnh và áp dụng các thao tác này trong các dự án thực tế.

Tham khảo

  1. OpenCV Documentation. (2023). cv2.imread()
  2. Real Python. (2023). Guide to OpenCV
  3. Geeks for Geeks. (2023). Image Processing using OpenCV
  4. Towards Data Science. (2023). Working with Images in OpenCV

    Hy vọng bài viết chi tiết này sẽ giúp bạn hiểu rõ hơn về cách thực hiện các thao tác cơ bản trên hình ảnh trong OpenCV và cách sử dụng thư viện này trong các tình huống thực tế. Nếu bạn cần thêm thông tin hoặc có câu hỏi, đừng ngần ngại liên hệ!

    Để lại một bình luận

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

    Contact Me on Zalo
    Call now