2014-10-30 7 views
0

Example with a black pixel in the middleКак найти позицию пикселя с заданным значением

Какой самый быстрый способ найти х и у координаты пикселя с заданным значением RGB? В этом примере черный пиксель равен 100x100. Должен ли я использовать openCV или Image? У кого-нибудь есть идея или пример для меня?

#!/usr/bin/env python 
# coding: utf-8 

import Image 

img = Image.open('splash.png') 
rgb = img.convert('RGB') 
r, g, b = rgb.getpixel((100, 100)) 

print r, g, b 
#for pixel in rgb.getdata(): 
# print pixel 
>>>0 0 0 

Как вы можете видеть, мне нужен обратный путь.

+0

обратите внимание, что вы могли бы создать какое-то хэш-таблица RGB-Value-на-Pixelosition образа, что позволяет получить доступ к желательным пикселям очень быстро, но требуется некоторое время, чтобы вычислить. Это будет хорошо, если вы будете искать снова и снова для одиночных значений RGB одного и того же изображения для разных «входов». – Micka

ответ

0

Не уверен, имеете ли вы значение «короткое время выполнения» или «самая быстрая команда для ввода». Если вы имеете в виду последние, это занимает около 4 секунд, чтобы набрать с помощью convert команды ImageMagick в:

convert B7cjD.png txt: | grep "#000000" 
100,100: (0,0,0,1) #000000 black 
2

Единственный способ сделать это, чтобы перебирать полное изображение и останавливается, когда вы нашли один пиксель, который соответствует вашему запросу. Если вам нужно делать это очень часто, для многих разных изображений вы можете поместить их в словарь для более быстрого доступа.

import Image 

def find_rgb(imagename, r_query, g_query, b_query): 
    img = Image.open(imagename) 
    rgb = img.convert('RGB') 
    for x in range(img.size[0]): 
     for y in range(img.size[1]): 
      r, g, b, = rgb.getpixel((x, y)) 
      if r == r_query and g == g_query and b == b_query: 
       return (x,y) 

print(find_rgb('splash.png', 0, 0, 0)) 
+0

Обратите внимание, что он может стать быстрее, если вам нужно постоянно искать разные значения RGB в вашем изображении. – Unapiedra

Смежные вопросы