Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Xử lý ảnh để phát hiện màu sắc nổi bật
Hướng Dẫn Đồ ÁnLập Trình AI

Xử lý ảnh để phát hiện màu sắc nổi bật

Chia sẻ
Chia sẻ

Phát hiện màu sắc nổi bật trong một bức ảnh là một bài toán quan trọng trong xử lý ảnh máy tính. Ứng dụng của nó rất rộng rãi: từ phân tích hình ảnh trong lĩnh vực thời trang, kiểm tra chất lượng sản phẩm, đến hệ thống nhận diện màu sắc cho xe tự hành hoặc robot.

Trong bài viết này, bạn sẽ học cách xây dựng một pipeline xử lý ảnh bằng Python và OpenCV để xác định màu sắc nổi bật trong ảnh. Bài viết sẽ hướng dẫn chi tiết từng bước, từ tải ảnh, chuyển đổi không gian màu, phân tích histogram đến xác định vùng màu nổi bật.

Mô tả bài toán

Bài toán đặt ra là: Xác định và hiển thị các vùng màu sắc nổi bật nhất trong một bức ảnh.

Pipeline xử lý sẽ gồm:

  1. Đọc ảnh và hiển thị ảnh gốc.
  2. Chuyển đổi ảnh từ không gian màu RGB sang HSV.
  3. Tính toán histogram màu và xác định màu xuất hiện nhiều nhất.
  4. Áp dụng mask để hiển thị vùng màu nổi bật.
  5. Hiển thị và lưu kết quả.

Thư viện cần cài đặt

Cài đặt OpenCV và matplotlib để xử lý và hiển thị ảnh:

pip install opencv-python matplotlib numpy

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

Để bắt đầu xử lý ảnh, bước quan trọng đầu tiên là đọc ảnh từ nguồn và hiển thị ảnh gốc. Việc này giúp bạn kiểm tra xem ảnh đã được tải đúng hay chưa và quan sát tổng quan màu sắc, bố cục của bức ảnh. Đây là cơ sở để so sánh với kết quả xử lý về sau, đảm bảo quá trình thực hiện không làm mất dữ liệu hình ảnh ban đầu.

Trong bước này, ta sẽ sử dụng thư viện OpenCV để đọc ảnh từ file. Vì OpenCV mặc định sử dụng không gian màu BGR thay vì RGB, cần chuyển đổi sang RGB để hiển thị đúng màu bằng Matplotlib. Sau đó, ảnh sẽ được hiển thị trực quan để người dùng xác nhận đầu vào.

import cv2
import matplotlib.pyplot as plt

# Đọc ảnh
image = cv2.imread('sample_image.jpg')
# Chuyển BGR (OpenCV mặc định) sang RGB để hiển thị đúng màu
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Hiển thị ảnh
plt.imshow(image_rgb)
plt.title("Ảnh gốc")
plt.axis('off')
plt.show()

Chuyển đổi sang không gian màu HSV

Không gian màu RGB biểu diễn màu sắc bằng ba thành phần Red, Green, Blue, nhưng khi cần phân tích và tách các màu cụ thể, không gian HSV (Hue, Saturation, Value) tỏ ra ưu việt hơn. Trong HSV, phần Hue (sắc độ) đại diện cho màu sắc, Saturation (độ bão hòa) cho biết mức độ thuần khiết của màu, và Value (giá trị) cho biết độ sáng.

Chuyển đổi ảnh sang HSV giúp dễ dàng xác định và lọc các vùng màu sắc dựa trên Hue. OpenCV cung cấp phương thức cv2.cvtColor() để thực hiện chuyển đổi này nhanh chóng và chính xác.

# Chuyển đổi ảnh từ RGB sang HSV
image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

Phân tích histogram màu

Sau khi chuyển sang không gian màu HSV, bước tiếp theo là phân tích phân bố màu sắc trong ảnh. Việc tính toán histogram màu giúp xác định màu nào xuất hiện nhiều nhất, từ đó suy ra vùng màu sắc nổi bật trong bức ảnh.

Histogram của kênh Hue sẽ được tính toán bằng OpenCV, cho phép đếm số pixel theo từng giá trị Hue (0–179). Sau khi có histogram, ta tìm bin có giá trị cao nhất, tương ứng với màu chiếm ưu thế trong ảnh.

import numpy as np

# Tính histogram của kênh Hue (H)
hist = cv2.calcHist([image_hsv], [0], None, [180], [0, 180])

# Tìm chỉ số của bin có giá trị cao nhất
dominant_hue = np.argmax(hist)
print(f"Màu hue nổi bật: {dominant_hue}")

Áp dụng mask để phát hiện vùng màu

Khi đã biết màu sắc nổi bật (theo Hue), bước này sẽ tạo một mặt nạ (mask) để lọc ra các vùng của ảnh có màu nằm trong khoảng Hue xác định. Mask này giúp chỉ giữ lại những pixel thuộc vùng màu nổi bật, còn các pixel khác bị loại bỏ.

Sử dụng cv2.inRange() để tạo mask dựa trên ngưỡng Hue ±10, cùng giá trị Saturation và Value để tránh lấy các vùng quá tối hoặc xám. Kết quả là một ảnh chỉ chứa vùng màu nổi bật cần quan sát.

# Đặt ngưỡng hue (±10)
lower_hue = np.array([max(dominant_hue - 10, 0), 50, 50])
upper_hue = np.array([min(dominant_hue + 10, 179), 255, 255])

# Tạo mask
mask = cv2.inRange(image_hsv, lower_hue, upper_hue)

# Áp dụng mask lên ảnh gốc
result = cv2.bitwise_and(image_rgb, image_rgb, mask=mask)

# Hiển thị vùng màu nổi bật
plt.imshow(result)
plt.title("Vùng màu nổi bật")
plt.axis('off')
plt.show()

Lưu kết quả

Bước cuối cùng là hiển thị vùng màu nổi bật được phát hiện và lưu kết quả để sử dụng sau. Việc hiển thị giúp bạn kiểm tra trực quan độ chính xác của quá trình xử lý, còn việc lưu ảnh cho phép tích hợp kết quả vào các ứng dụng khác hoặc chia sẻ với người dùng.

OpenCV cung cấp cv2.imwrite() để lưu ảnh đã xử lý xuống đĩa, đảm bảo dễ dàng tái sử dụng mà không cần chạy lại toàn bộ pipeline.

cv2.imwrite('dominant_color_region.jpg', cv2.cvtColor(result, cv2.COLOR_RGB2BGR))

Ứng dụng nâng cao

Bạn có thể mở rộng pipeline để:

  • Xác định top N màu nổi bật trong ảnh.

  • Hiển thị từng vùng màu trên ảnh riêng biệt.

  • Sử dụng K-means clustering để nhóm các màu tương tự.

Ví dụ: K-means để tìm 3 màu nổi bật nhất:

from sklearn.cluster import KMeans

# Reshape ảnh để clustering
pixels = image_rgb.reshape((-1, 3))
kmeans = KMeans(n_clusters=3)
kmeans.fit(pixels)
colors = kmeans.cluster_centers_

# Hiển thị các màu nổi bật
for i, color in enumerate(colors):
    plt.subplot(1, 3, i+1)
    plt.imshow([[color / 255]])
    plt.title(f"Màu #{i+1}")
    plt.axis('off')
plt.show()

Kết luận

Qua bài viết này, bạn đã học cách xây dựng pipeline xử lý ảnh tiếng Việt để phát hiện vùng màu sắc nổi bật. Kỹ thuật này hữu ích cho nhiều ứng dụng thực tế như nhận diện sản phẩm, phân tích ảnh thời trang, hoặc kiểm tra màu sắc trong sản xuất.

Bạn có thể tiếp tục phát triển bằng cách kết hợp K-means để phát hiện nhiều màu hoặc xây dựng một Flask API để nhận ảnh từ client và trả về kết quả phân tích.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!