KudoKhang/ColorDetector: Xác định Màu Sắc Qua Camera - GitHub
Có thể bạn quan tâm
Giúp máy tính nhận diện màu sắc là một bài toán rất thú vị và cũng không kém phần quan trọng trong mảng thị giác máy tính. Ở trong dự án này mình sẽ xây dựng một ứng dụng nhận diện màu sắc từ camera với độ chính xác rất cao.
How it work
Như đã biết, mỗi điểm của bức ảnh màu được biểu diễn bằng 3 giá trị trong hệ màu RGB. Với Opencv chúng ta dễ dàng lấy được tạo độ ảnh mong muốn để xác định màu. Ở đây mình lấy tọa độ đó là tâm của khung hình cho dễ:
ret, img = cap.read() img = cv2.flip(img, 1) x, y = int(img.shape[1]/2), int(img.shape[0]/2)Tiếp theo là xác định giá trị RGB tại điểm đó:
def getBGR(x, y): global b, g, r b, g, r = img[y, x] b, g, r = int(b), int(g), int(r) return b, g, rSau khi có được giá trị RGB tại điểm ảnh thì ta viết hàm so sánh nó với giá trị RGB trong file colors.csv (đây là một file cho ta biết 865 màu sắc với giá trị RGB tương ứng). Giá trị RGB của ảnh gần nhất với giá trị RGB nào trong file csv thì ta có thể gắn màu sắc tương ứng cho điểm ảnh ta cần xác định:
def getColorName(b, g, r): minimum = 1000 for i in range(len(csv)): d = abs(b - int(csv.loc[i, "B"])) + abs(g - int(csv.loc[i, "G"])) + abs(r - int(csv.loc[i, "R"])) # maximum = 255 + 255 + 255 = 765 (d = ||b-B|| + ||g-G|| + ||r-R||) if (d <= minimum): minimum = d cname = csv.loc[i, "color_name"] # print(minimum) return cnameĐể tăng thêm độ màu mè cho khung hình chúng ta sẽ thêm khung hình vuông xung quanh tâm 🤓:
def drawSquare(img, x, y): YELLOW = (0, 255, 255) BLUE = (255, 225, 0) cv2.line(img, (x - 150, y - 150), (x - 100, y - 150), YELLOW, 2) cv2.line(img, (x - 150, y - 150), (x - 150, y - 100), BLUE, 2) cv2.line(img, (x + 150, y - 150), (x + 100, y - 150), YELLOW, 2) cv2.line(img, (x + 150, y - 150), (x + 150, y - 100), BLUE, 2) cv2.line(img, (x + 150, y + 150), (x + 100, y + 150), YELLOW, 2) cv2.line(img, (x + 150, y + 150), (x + 150, y + 100), BLUE, 2) cv2.line(img, (x - 150, y + 150), (x - 100, y + 150), YELLOW, 2) cv2.line(img, (x - 150, y + 150), (x - 150, y + 100), BLUE, 2) cv2.circle(img, (x, y), 5, (255, 255, 153), -1)Như vậy cơ bản chúng ta đã xong việc, phần còn lại là gọi những hàm vừa viết và show nó ra:
while True: ret, img = cap.read() img = cv2.flip(img, 1) x, y = int(img.shape[1]/2), int(img.shape[0]/2) getBGR(x, y) getColorName(b, g, r) drawSquare(img, x, y) putText(img, x, y) cv2.imshow('Detector Color', img) if cv2.waitKey(1) & 0xFF == ord('q'): breakChi tiết trong trong main.py
UsageĐể sử khởi chạy:
git clone https://github.com/KudoKhang/ColorDetector cd ColorDetector python main.pyTừ khóa » Nhận Diện Màu Sắc Python
-
Video Hướng Dẫn: Nhận Dạng Màu Sắc Với Python Và OpenCV Nhé ...
-
Trích Xuất Và Phân Tích Màu Sắc Từ Hình ảnh Bằng Python - Morioh
-
Python: Phân đoạn Hình ảnh Bằng Không Gian Màu Trong OpenCV + ...
-
Nhận Dạng ảnh Cơ Bản Với Python - Viblo
-
Nhận Dạng Màu Sắc Chính Xác Bằng Phần Mềm Viết Từ Python
-
Tách Một đối Tượng Có Màu Quy định Ra Khỏi Bức ảnh - YouTube
-
Machine Learning Tự động Nhận Diện Màu Sắc
-
Chương 5. Xử Lý ảnh Phân Loại Màu Sắc Và Phát Hiện Tọa độ Của Vật
-
Các Hệ Màu Trong Xử Lý ảnh - Kipalog
-
Lọc Màu ảnh Với Thư Viện OpenCV Trên Raspberry Pi
-
Nhan Dien Hinh Anh Bang Python | Nguyễn Công Trình
-
Phần 8. Các Không Gian Màu Trong OpenCV
-
Theo Dõi đối Tượng Theo Màu - Tracking Color - THỊ GIÁC MÁY TÍNH
-
Xử Lý Hình ảnh Bằng Python - Koodibar