Lọc Màu ảnh Với Thư Viện OpenCV Trên Raspberry Pi

Lọc màu ảnh với thư viện OpenCV trên Raspberry Pi

 Xin chào các bạn !

Tiếp nối chủ đề về xử lý ảnh sử dụng thư viện OpenCV trên Raspberry Pi. Hôm nay mình sẽ giới thiệu đến các bạn ứng dụng thư viện này để lọc màu ảnh.

" Lọc màu ảnh (filter color) là tìm đối tượng dựa trên màu sắc của vật thể đó ". Bài này có ý tưởng tương tự bài Theo dõi đối tượng theo màu sử dụng Raspberry Pi và Camera CSI, chúng ta sẽ sử dụng python và OpenCV để thực hiện.

Giải thuật lọc màu ảnh này phù hợp nhất với đối tượng có màu sắc tương phản với background.

Chúng ta sử dụng hệ màu HSV để lọc màu.

HSV hay còn gọi là không gian màu HSB là một không gian màu dựa trên 3 thông số chính của không gian màu :

+ H viết tắt của từ HUE có nghĩa là vùng màu

+ S Viết tắt của từ SATURATION có nghĩa là độ bảo hòa màu .

+ V viết tắt của chữ VALUE có nghĩ là giá trị hay độ sáng của màu sắc.

Sau khi chuyển từ hệ màu RGB sang HSV thì filter giá trị màu bằng hàm cv2.inRange(), kết quả là ảnh binary gọi là mask.

Sau đó áp dụng mask này vào ảnh gốc ta được ảnh chỉ chứa màu trong giới hạn cần tìm.

Các bước tiến hành :

Bước 1 : Tạo các Trackbars

Chúng ta cần có 6 Trackbar tương ứng với 3 kênh H, S, V mỗi kênh có 2 Trackbar là min và max cụ thể ở đây là [H_min,; H_max], [S_min; S_max], [V_min; V_max].

Bước 2 : Tách màu cần tìm dựa vào giá trị của Trackbar.

Ở đây chúng ta sử dụng hàm cv2.inRange() để làm công việc tách màu trên.

Cụ thể ở đây chúng ta sẽ căn chỉnh Trackbars sao cho mask thể hiện đúng vùng màu mong muốn. Tiếp theo là copy vùng màu theo mask vào ảnh mới. 

Các bạn có thể gõ lại đoạn code dưới đây hoặc tải xuống từ github tại đây. (Filter_color.py)

import cv2import numpy as np def nothing(x):    pass # create Trackbarscv2.namedWindow("Trackbars")cv2.createTrackbar("H_min", "Trackbars", 0, 179, nothing)cv2.createTrackbar("S_min", "Trackbars", 0, 255, nothing)cv2.createTrackbar("V_min", "Trackbars", 0, 255, nothing)cv2.createTrackbar("H_max", "Trackbars", 179, 179, nothing)cv2.createTrackbar("S_max", "Trackbars", 255, 255, nothing)cv2.createTrackbar("V_max", "Trackbars", 255, 255, nothing) while True :    # read image     image = cv2.imread("/home/pi/Desktop/Cam.jpeg")     # resize image    image = cv2.resize(image,(320,240))     # converting frame(image == BGR) to HSV(hue-saturation-value)    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)     # get value Trackbars    H_min = cv2.getTrackbarPos("H_min", "Trackbars")    S_min = cv2.getTrackbarPos("S_min", "Trackbars")    V_min = cv2.getTrackbarPos("V_min", "Trackbars")    H_max = cv2.getTrackbarPos("H_max", "Trackbars")    S_max = cv2.getTrackbarPos("S_max", "Trackbars")    V_max = cv2.getTrackbarPos("V_max", "Trackbars")     # range color     lower_red = np.array([H_min, S_min, V_min])    upper_red = np.array([H_max, S_max, V_max])     # Morphological Transformations,Opening and Closing    thresh = cv2.inRange(hsv,lower_red, upper_red)    kernel = np.ones((5,5),np.uint8)    mask = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)    result = cv2.bitwise_and(image, image, mask = mask)    cv2.imshow("Original", image)    cv2.imshow("mask", mask)    cv2.imshow("result", result)    if cv2.waitKey(1) & 0xFF == ord('q'):        exit()cv2.destroyAllWindows()

Ta thu được kết quả như hình :

Một số ứng dụng của lọc màu ảnh.

+ Phát hiện rầu nâu trên lúa :

+ Phát hiện trứng ốc bươu vàng :

Nếu các bạn có bất kỳ ý tưởng mới nào đừng ngần ngại mà hãy inbox trực tiếp cho fanpage . Xin chào và hẹn gặp lại các bạn trong các bài viết tiếp theo !!!

PIVIETNAM.COM.VN CHÚC CÁC BẠN THÀNH CÔNG !!!

Thực hiện bài viết : Đào Văn Hậu

Để cập nhật các tin tức công nghệ mới các bạn làm theo hướng dẫn sau đây :

Các bạn vào Trang chủ >> Tin tức. ở mục này có các bài viết kỹ thuật thuộc các lĩnh vực khác nhau các bạn có thể lựa chọn lĩnh vực mà mình quan tâm để đọc nhé !!!

Các bạn cũng có thế kéo xuống cuối trang để xem những tin tức công nghệ mới nhất.

Từ khóa » Nhận Diện Màu Sắc Python