将像素颜色存储在数据帧中



我想使用PILLOW加载一张(黑白(图片(.png(,并获得每个像素的灰度值。稍后,我想将每个像素的值存储在一个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是颜色。(只有大于特定值(例如100(的z值才应保存在数据帧中(。我现在的代码:

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进行集群时,我正在寻找一个非常快速的解决方案,因为集群本身需要一些时间。

期待建议!:(

我不会指望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值,你可以将它们放入Panda。。。或者使用图像处理工具,如SciPyOpenCVscikit image

最新更新