Tôi đã thực hiện một chức năng để tìm màu trong hình ảnh và trả lại x, y. Bây giờ tôi cần phải thêm một chức năng mới, nơi tôi có thể tìm thấy một màu sắc với một dung sai nhất định. Nên dễ dàng?Python - Tìm các màu tương tự, cách tốt nhất
Mã để tìm màu sắc trong hình ảnh, và trở về x, y:
def FindColorIn(r,g,b, xmin, xmax, ymin, ymax):
image = ImageGrab.grab()
for x in range(xmin, xmax):
for y in range(ymin,ymax):
px = image.getpixel((x, y))
if px[0] == r and px[1] == g and px[2] == b:
return x, y
def FindColor(r,g,b):
image = ImageGrab.grab()
size = image.size
pos = FindColorIn(r,g,b, 1, size[0], 1, size[1])
return pos
Kết quả:
Taken từ các câu trả lời các phương pháp bình thường so sánh hai màu sắc là trong khoảng cách Euclide , hoặc Chebyshev khoảng cách.
Tôi quyết định sử dụng chủ yếu (bình phương) khoảng cách euclide và nhiều không gian màu khác nhau. LAB, deltaE (LCH), XYZ, HSL và RGB. Trong mã của tôi, hầu hết các không gian màu sử dụng khoảng cách bình phương euclide để tính toán sự khác biệt.
Ví dụ: LAB, RGB và XYZ một bình phương đơn giản. khoảng cách hiện các trick:
if ((X-X1)^2 + (Y-Y1)^2 + (Z-Z1)^2) <= (Tol^2) then
...
LCH, và HSL là một chút phức tạp hơn khi cả hai đều có một màu sắc hình trụ, nhưng một số mảnh toán giải quyết đó, sau đó nó tiếp tục sử dụng eucl phương. ở đây là tốt.
Trong hầu hết các trường hợp này, tôi đã thêm "thông số riêng biệt" cho dung sai cho mỗi kênh (sử dụng 1 dung sai toàn cầu và "công cụ sửa đổi" thay thế HueTol := Tolerance * hueMod
hoặc LightTol := Tolerance * LightMod
).
Dường như các không gian màu được xây dựng trên đầu trang của XYZ (LAB, LCH) hoạt động tốt nhất trong nhiều trường hợp của tôi. Tho HSL mang lại kết quả rất tốt trong một số trường hợp, và rẻ hơn rất nhiều để chuyển đổi sang RGB, RGB cũng rất tuyệt vời và đáp ứng hầu hết các nhu cầu của tôi.
Bạn nên trả lại nội dung nếu bạn không tìm thấy màu trong hình ảnh. tức là một mã lỗi. –
Bạn xác định mức độ dung sai như thế nào? Các dải ô riêng biệt cho 'r',' g' và 'b'? –
Tôi với John: bạn đã thử những gì? Bạn có thể xem [tương tự cosin] (https://en.wikipedia.org/wiki/Cosine_similarity) và tìm kiếm các triển khai Python. –