Вам не нужно pandas
для этого. И вам не нужно читать это снова. Вы даже можете использовать L
в .point(fn, mode='L')
r = img.convert('L').point(fn, mode='1')
r.save(...)
data = np.where(r) # [[y1,y2,...], [x1,x2,...], ]
points = list(zip(*data)) # [[y1,x1], [y2,x2], ...]
print(points)
. Вы можете использовать where()
на r
напрямую, чтобы получить список с [[y1,y2,...], [x1,x2,...]]
.
И затем вы можете использовать zip()
для создания пар [y1, x1]
, [y2,x2]
и т. Д.
РЕДАКТИРОВАТЬ: Для других пикселей вы можете использовать ~
для отрицания значений в r
data = np.where(~r) # other pixels
Массив работает с координатами (row, columns)
, что означает (y, x)
- как в ожидаемых вами данных (2,3), (2,4)
- но если вам понадобится (x, y)
, тоиспользовать:
points = list(zip(data[1], data[0]))
в конечном итоге
points = [(x,y) for y,x in zip(*data)]
РЕДАКТИРОВАТЬ: Вам не нужно даже .point()
from PIL import Image
import numpy as np
img = Image.open('image.png').convert('L')
arr = np.array(img)
#data = np.where( arr > 200 ) # for white pixels
#data = np.where( ~(arr > 200) ) # for black pixels too
data = np.where(arr < 200) # for black pixels
points_y_x = list(zip(*data))
points_x_y = list(zip(data[1], data[0]))
print(points_y_x)
print(points_x_y)