Cách khắc phục lỗiCó hai nguyên nhân tiềm năng cho lỗi này xảy ra: Show
Để khắc phục sự cố này, bạn nên đảm bảo tên tệp được đánh vần chính xác (kiểm tra độ nhạy của trường hợp chỉ trong trường hợp) và tệp hình ảnh nằm trong thư mục làm việc hiện tại (có hai tùy chọn ở đây: bạn có thể thay đổi thư mục làm việc hiện tại trong IDE của bạn hoặc chỉ định đường dẫn đầy đủ của tệp). Màu trung bình so với màu chi phốiSau đó, để tính toán "màu trung bình" mà bạn phải quyết định ý của bạn là gì. Trong một hình ảnh thang độ xám, nó chỉ đơn giản là trung bình của các mức màu xám trên hình ảnh. Màu sắc thường được thể hiện thông qua các vectơ 3 chiều trong khi mức xám là vô hướng. Màu trung bình là tổng của tất cả các pixel chia cho số lượng pixel. Tuy nhiên, cách tiếp cận này có thể mang lại một màu khác với màu thị giác nổi bật nhất. Những gì bạn thực sự có thể muốn là màu chi phối hơn là màu trung bình.dominant color rather than average colour. Thực hiệnHãy đi qua mã từ từ. Chúng tôi bắt đầu bằng cách nhập các mô -đun cần thiết và đọc hình ảnh:
Sau đó, chúng ta có thể tính toán giá trị trung bình của từng kênh màu theo phương thức tương tự với phương thức được đề xuất bởi @ruan b .:
Tiếp theo, chúng tôi áp dụng phân cụm K-MEAN để tạo bảng màu với màu sắc đại diện nhất của hình ảnh (trong ví dụ đồ chơi này ____10 được đặt thành 1).
Và cuối cùng, màu chiếm ưu thế là màu bảng màu xảy ra thường xuyên nhất trên hình ảnh lượng tử hóa:
So sánh kết quảĐể minh họa sự khác biệt giữa cả hai phương pháp, tôi đã sử dụng hình ảnh mẫu sau: Các giá trị thu được cho màu trung bình, tức là một màu có các thành phần là phương tiện của ba kênh màu sắc và màu sắc chi phối được tính toán thông qua phân cụm K-mean khá khác nhau:
Hãy xem những màu sắc đó trông như thế nào để hiểu rõ hơn về sự khác biệt giữa cả hai phương pháp. Ở phần bên trái của hình bên dưới, nó được hiển thị màu trung bình. Nó nổi lên rõ ràng rằng màu trung bình được tính toán không mô tả đúng nội dung màu của hình ảnh gốc. Trên thực tế, không có một pixel nào với màu đó trong hình ảnh gốc. Phần bên phải của hình cho thấy năm màu đại diện nhất được sắp xếp từ trên xuống dưới theo thứ tự quan trọng giảm dần (tần số xuất hiện). Bảng màu này cho thấy rõ rằng màu chiếm ưu thế là màu đỏ, phù hợp với thực tế là khu vực lớn nhất có màu đồng nhất trong hình ảnh gốc tương ứng với mảnh LEGO màu đỏ. Đây là mã được sử dụng để tạo hình trên:
Tl; dr trả lờiTóm lại, mặc dù tính toán màu trung bình - như được đề xuất trong câu trả lời của @ruan B. - là chính xác, kết quả mang lại có thể không thể hiện đầy đủ nội dung màu của hình ảnh. Một cách tiếp cận hợp lý hơn là việc xác định màu chiếm ưu thế thông qua lượng tử hóa vector (phân cụm).
Hướng dẫn này sẽ thảo luận về việc tìm kiếm màu trung bình của hình ảnh bằng cách sử dụng hàm 2 của Numpy trong Python.Sử dụng chức năng average = img.mean(axis=0).mean(axis=0) 2 của Numpy để tìm màu trung bình của hình ảnh trong PythonSử dụng chức năng 3 của 4 để tìm các màu chiếm ưu thế trong hình ảnh trong PythonHướng dẫn này sẽ thảo luận về việc tìm kiếm màu trung bình của hình ảnh bằng cách sử dụng hàm 2 của Numpy trong Python.Trong toán học, chúng ta có thể tìm thấy trung bình của một vectơ bằng cách chia tổng của tất cả các phần tử trong vectơ cho tổng số phần tử. Một hình ảnh bao gồm các pixel và mỗi pixel có một màu cụ thể được xác định bởi giá trị bộ ba RGB. Để tìm màu trung bình trong một hình ảnh, chúng ta phải lấy trung bình của tất cả các giá trị bộ ba RGB. Chúng ta có thể sử dụng chức năng 7 để đọc hình ảnh và lưu trữ nó trong một ma trận.Xem mã bên dưới.
Output:
Chúng ta có thể sử dụng hàm 2 của Numpy để tìm mức trung bình của ma trận hình ảnh và hiển thị nó bằng hàm 9.Chúng ta cũng có thể tạo một hình ảnh màu đen bằng cách sử dụng hàm 0 của Numpy và sau đó đặt màu trung bình vào hình ảnh này và hiển thị nó bằng hàm 1 của OpenCV.Giá trị bộ ba RGB được lưu trong biến 2 và nó cũng được hiển thị cùng với hình ảnh nguồn. Đối số đầu tiên trong hàm 2 là hình ảnh nguồn.Đối số thứ hai chỉ định hướng mà trung bình sẽ xảy ra. Trong mã trên, 4 lấy các hàng trung bình trong ma trận hình ảnh.Sử dụng chức năng average = img.mean(axis=0).mean(axis=0) 3 của average = img.mean(axis=0).mean(axis=0) 4 để tìm các màu chiếm ưu thế trong hình ảnh trong PythonHướng dẫn này sẽ thảo luận về việc tìm kiếm màu trung bình của hình ảnh bằng cách sử dụng hàm 2 của Numpy trong Python.Trong toán học, chúng ta có thể tìm thấy trung bình của một vectơ bằng cách chia tổng của tất cả các phần tử trong vectơ cho tổng số phần tử. Một hình ảnh bao gồm các pixel và mỗi pixel có một màu cụ thể được xác định bởi giá trị bộ ba RGB. Để tìm màu trung bình trong một hình ảnh, chúng ta phải lấy trung bình của tất cả các giá trị bộ ba RGB. Chúng ta có thể sử dụng chức năng 7 để đọc hình ảnh và lưu trữ nó trong một ma trận.Chúng ta có thể sử dụng hàm 2 của Numpy để tìm mức trung bình của ma trận hình ảnh và hiển thị nó bằng hàm 9.Chúng ta có thể hiển thị các màu chiếm ưu thế bằng cách sử dụng chức năng 3 của OpenCV. Chúng tôi cũng sẽ hiển thị tỷ lệ phần trăm của các màu chiếm ưu thế.Xem mã bên dưới.
Output:
Như được hiển thị, giá trị bộ ba RGB cùng với tỷ lệ phần trăm màu sắc chi phối được hiển thị trong đầu ra. OpenCV đọc hình ảnh trong không gian màu BRG rằng lý do tại sao chúng tôi chuyển đổi hình ảnh thành RGB bằng hàm 4 của OpenCV.Hàm 5 trong mã trên được sử dụng để tạo hình ảnh trống và sau đó chúng tôi đã sử dụng hàm 3 để tạo hình chữ nhật có màu trội theo tỷ lệ phần trăm của chúng trên đầu hình ảnh trống.Giá trị của số lượng cụm được đặt thành 5 trong mã trên, nhưng chúng ta có thể sử dụng bao nhiêu cụm tùy thích. Nếu chúng ta sử dụng 10 cụm, mã sẽ trả về các màu chiếm ưu thế, nhưng mã sẽ mất nhiều thời gian hơn 5 cụm. Chúng tôi cũng có thể đặt nhiều đối số khác trong hàm 3, như các lần lặp tối đa bằng cách sử dụng đối số 8 được đặt thành 300 theo mặc định.Chúng tôi cũng có thể đặt dung sai bằng đối số 9 được đặt thành 0,0001 theo mặc định và thuật toán được sử dụng để tìm các cụm được đặt thành tự động theo mặc định. Kiểm tra liên kết này để biết thêm chi tiết về chức năng 3.Đối số đầu tiên của hàm 3 là hình ảnh mà chúng tôi muốn vẽ hộp màu. Đối số thứ hai là vị trí bắt đầu, sẽ đặt điểm bắt đầu hình chữ nhật.Đối số thứ ba là vị trí kết thúc của hình chữ nhật. Đối số thứ tư xác định màu hình chữ nhật ở định dạng bộ ba BGR và đối số thứ năm là độ dày đường của hình chữ nhật. Nếu độ dày đường được đặt thành -1, hình chữ nhật sẽ được lấp đầy bằng màu. |