Python: значения пикселей при отображении изображения?

Используя любую из библиотек numpy, scikit-image, я могу легко загрузить и отобразить изображение как ndarray. Однако мне нужен какой-то дисплей, на котором я могу перемещать курсор по изображению и видеть индексы текущего пикселя и его значения серого (или RGB), например: (213,47: 178) или ( 213,47:122,10,205) - эти значения естественно постоянно меняются по мере движения курсора.

Есть простой способ сделать это? О: Я использую Linux, но мои ученики будут использовать Windows, поэтому я надеюсь на кросс-платформенное решение.


person Alasdair    schedule 01.11.2013    source источник
comment
Это очень легко сделать с помощью matplotlib см. связанный вопрос и пример API matplotlib.org/examples/ API/image_zcoord.html   -  person tacaswell    schedule 01.11.2013


Ответы (1)


Я использую tkinter для отображения и PIL для чтения любого изображения. Это очень медленное решение.

def pil2tkinter_image(img_path, master = None, *args, **kw):
    import tkinter, PIL.Image
    img = PIL.Image.open(img_path)
    x0, y0, width, height = img.getbbox()
    l = []
    for y in range(y0, height):
        l.append('{')
        for x in range(x0, width):
            l.append('#%02X%02X%02X' % img.getpixel((x, y))[:3])
        l.append('}')
    data = ' '.join(l) # slow part
    pi = tkinter.PhotoImage(master = master, *args, **kw)
    pi.put(data, (0,0))
    return pi

Функция pil2tkinter_image берет путь к изображению любого вида, png, bmp, jpg, gif и создает из него tkinter PhotoImage.

Вы можете встроить это изображение в виджет tkinter и использовать события мыши для чтения значений пикселей.

person User    schedule 01.11.2013