2010-02-16 38 views
15

Sau khi tải xuống hình ảnh từ trang web, tôi cần phát hiện màu của hình ảnh đã tải xuống. Tôi đã tải xuống hình ảnh thành công nhưng tôi cần phát hiện màu của hình ảnh tương ứng và lưu nó vào tên của color.Code tương ứng được sử dụng được đưa ra dưới đây. Cho tôi biết làm thế nào tôi có thể đạt được nó từ vị trí hiện tại.Phát hiện màu ảnh bằng python

imageurl='http://www.example.com/' 
opener1 = urllib2.build_opener() 
page1=opener1.open(imageurl) 
my_picture=page1.read() 
fout = open('images/tony'+image[s], "wb") 
fout.write(my_picture) 
fout.close() 
+0

Bạn có ý nghĩa gì về màu của hình ảnh - là hình ảnh hoàn toàn một màu? –

+0

Ya hình ảnh là hoàn toàn một màu ...... – user244470

+0

Nó không phải là rõ ràng - bạn có muốn màu trung bình hoặc màu sắc thường xuyên nhất? –

Trả lời

10

Use a PIL (Python Image Library) histogram. Lặp lại biểu đồ và lấy màu pixel trung bình được tính bằng số pixel.

+4

Để trả lời câu hỏi tiếp theo, dưới đây là ví dụ hoạt động thể hiện cách tiếp cận này: https://gist.github.com/1246268 – olooney

9

Như đã đề cập bởi những người khác, PIL là thư viện phù hợp. Đây là một chức năng mở một hình ảnh và tìm màu chính.

def get_main_color(file): 
    img = Image.open(file) 
    colors = img.getcolors(256) #put a higher value if there are many colors in your image 
    max_occurence, most_present = 0, 0 
    try: 
     for c in colors: 
      if c[0] > max_occurence: 
       (max_occurence, most_present) = c 
     return most_present 
    except TypeError: 
     raise Exception("Too many colors in the image") 

Tôi hy vọng nó giúp

Cập nhật: đi qua 256 để getcolors là ok cho hình ảnh rất nhỏ nhưng có thể không hoạt động trong hầu hết các trường hợp. Giá trị này phải được tăng lên cho hình ảnh lớn hơn. ví dụ: 1024 * 1024 là ok cho hình ảnh 400 pixel * 300 pixel.

5

Bạn nên sử dụng trình phân tích cú pháp PIL từ lớp ImageFile để đọc tệp từ url. Thế thì cuộc sống khá dễ dàng bởi vì bạn nói rằng toàn bộ hình ảnh có cùng màu. Dưới đây là một số mã được xây dựng trên mã của bạn:

import urllib2 
import ImageFile 

image_url = "http://plainview.files.wordpress.com/2009/06/black.jpg" 
opener1 = urllib2.build_opener() 
page1=opener1.open(image_url) 

p = ImageFile.Parser() 

while 1: 
    s = page1.read(1024) 
    if not s: 
     break 
    p.feed(s) 

im = p.close() 
r,g,b = im.getpixel((0,0)) 

fout = open('images/tony'+image[s]+"%d%_d%_d"%(r,g,b), "wb") 
fout.write(my_picture) 
fout.close() 

Điều này sẽ nối thêm giá trị màu xanh lá cây của điểm ảnh đầu tiên của hình ảnh vào cuối tên hình ảnh. Tôi đã thử nghiệm tất cả mọi thứ cho đến khi các dòng fout.

+0

Cảm ơn Justin đã trả lời ur nó thực sự đã giúp rất nhiều. Thực ra tôi đã nhận được tên tệp có màu đỏ xanh lục và giá trị màu xanh của màu của pixel đã cho của hình ảnh. Có thể lấy tên màu thực của hình ảnh đó cho pixel đã cho .... hoặc chúng tôi có thể chuyển đổi pixel đã thu được thành tên màu tương ứng liên quan Arun – user244470

+1

bạn sẽ cần tạo một từ điển có giá trị RGB làm khóa và tên làm giá trị. Bạn có thể sử dụng danh sách màu tại trang này, http://en.wikipedia.org/wiki/List_of_colors, có thể. Bạn sẽ sử dụng urllib2 để lấy tên và các giá trị RGB tương ứng. –

0

Bạn có thể sử dụng thuật toán K-means để nhận được màu K chính của hình ảnh. Dưới đây là ví dụ về cách thực hiện: K-means using OpenCV (Python)

Các vấn đề liên quan