numpy 使用PIL getpixel从图像上的x,y点数组中获取像素值

pcww981p  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(151)

所以我有一张图像,我有一个网格点,我想从图像中得到RGB值。我正在使用PIL的getpixel()并得到错误:

return self.im.getpixel(xy)
TypeError: an integer is required

我认为问题在于getpixel中的xy是x和y值的数组,而不是整数。但是我如何让它给予我所有这些点的所有rgb值呢?我是否使用getpixel以外的东西?我的代码看起来像这样:

xm = np.linspace(xmin, xmax, inputx)
ym = np.linspace(ymin, ymax, inputy)
xmr, ymr = np.meshgrid(xm, ym)
r, g, b = list(image1.getpixel((xmr, ymr)))

当我尝试打印r,g,B时会出现错误。我如何让它给予我一个RGB值的数组在所有我给定点的meshgrid?

ryevplcw

ryevplcw1#

你得到了一个错误,因为getpixel方法一次需要一个像素。一个更简单的替代方法是将图像转换为numpy数组并获取值:

xm = np.linspace(xmin, xmax, inputx).astype(int)
ym = np.linspace(ymin, ymax, inputy).astype(int)
xmr, ymr = np.meshgrid(xm, ym)
img = np.array(img)
sub_image = img[xmr.flatten(), ymr.flatten()]
sub_image[0], sub_image[1], sub_image[2]

但是,如果您确实希望使用getpixel,则可以执行以下操作:

vals = list(img.getpixel((int(x), int(y))) for x,y in zip(xmr.flatten(), ymr.flatten()))
r = [val[0] for val in vals]
g = [val[1] for val in vals]
b = [val[2] for val in vals]
r, g, b

相关问题