Сохранить цвет пикселя во фрейме данных - PullRequest
2 голосов
/ 10 апреля 2020

Я хочу загрузить (черно-белое) изображение (.png) с помощью PILLOW и получить значение серого для каждого пикселя. Позже я хочу сохранить значение для каждого пикселя в pd.DataFrame следующим образом:

        x    y    z
0      13    0  115
1      14    0  116
2      15    0  120
3      16    3  122
4      17    4  119

, где x, y - координаты пикселей, а z - цвет. (В кадре данных должны быть сохранены только значения z, превышающие заданное значение c (например, 100)). Мой код на данный момент:

img = Image.open(...)
img = img.convert('LA')

pixels = img.load()

x =[]
y =[]
z =[]

def test(x,y):
    return int(pixels[x,y][0])

size = 200
for i in range(size):
    for j in range(size):
        if test(j,i)>100:
            x+=[j]
            y+=[i]
            z+=[test(j,i)]

f=(x,y,z)
df = pd.DataFrame(data=[f[0],f[1],f[2]]).T

У меня такое ощущение, что это не лучший способ решения проблемы. Также, когда у меня очень большие картинки, этот метод кажется очень медленным. Поскольку я хочу сделать кластеризацию на основе этого DataFrame, я ищу решение, которое будет очень быстрым, так как сама кластеризация займет некоторое время после этого.

Ждем предложений! :) 1009 *

1 Ответ

0 голосов
/ 11 апреля 2020

Я бы не стал искать Pandas для обработки изображений, но если это то, что вы хотите сделать, вы можете получить это так:

import numpy as np
from PIL import Image

# Load image and convert to greyscale - NOT greyscale plus alpha!
Image.open('paddington.png').convert('L')

# Make into Numpy array
na = np.array(im)

# Find X, Y locations of all pixels exceeding 100
Y, X = np.where(na>100)

# Grab greyscale values at those coordinates
Z = na[Y, X]

Итак, на этом этапе вы будете есть массивы 3 Numpy с вашими значениями X, Y и Z, и вы можете поместить их в Pandas ... или использовать инструмент для обработки изображений, например SciPy , OpenCV scikit-image .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...