如何解决:索引器:图像索引超出范围

2024-10-02 10:20:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,尝试获取第80行中的每一个80像素,以下是我的代码:

from PIL import Image


im = Image.open("UIC.bmp")
size = (list(im.size))  #  size is 1200x800
pixel_row = []
for y in range(0,1200, 80):
    print(y)

    for x in range(0, 800, 80):
        print(x)
        cordinate = x, y
        pixel_row.append(im.getpixel(cordinate))


print(pixel_row)

完成后,我使用以下代码解码文本:

print(pixel_list)

decode_list = []
for i in range(len(pixel_list)):
    decode_list.append(chr(pixel_list[i] - 100))

decode_text = ''.join(decode_list)

print(decode_text)

它给出了一个错误:

Traceback (most recent call last):
  File "/Users/apple/Desktop/projects/BariySatarov/test.py", line 13, in <module>
    pixel_row.append(im.getpixel(cordinate)[2])
  File "/Users/apple/Desktop/projects/BariySatarov/venv/lib/python3.8/site-packages/PIL/Image.py", line 1358, in getpixel
    return self.im.getpixel(xy)
IndexError: image index out of range

我不知道该怎么计算,因为我得到的范围与图片的范围相同

p.S.试图将范围(01199,80)和范围(0799,80)放在一起,但它不起作用


Tags: 代码inimageforsizerangelistrow
2条回答

你必须在x和y之间切换

x表示列,而不是行

您可以为此使用numpy和数组索引:

from PIL import Image
import numpy as np


im = Image.open("UIC.bmp")
arr = np.array(im)
pixel_row = arr[::80,::80].flatten()

相关问题 更多 >

    热门问题