gpt4 book ai didi

python - 使用枕头的图像处理代码有问题吗?

转载 作者:太空宇宙 更新时间:2023-11-03 15:32:44 26 4
gpt4 key购买 nike

我尝试创建一个可以转换图片的滤镜。

示例:第一个像素取下一个像素的颜色,最后一个像素取第一个像素的颜色。

我使用了 python 3.6.8 和 pillow 库。

这是我的代码:

from PIL import Image
from time import sleep

import random

size1=1024
size2=1024

img_1 = Image.new( 'RGB', (size1,size2), "black") # create a new black image
pixels = img_1.load() # create the pixel map
img_1.show()

for i in range(img_1.size[0]): # for every col:
for j in range(img_1.size[1]): # For every row
pixels[i,j] = (random.randint(0,255), random.randint(0,255), random.randint(0,255)) # set the colour accordingly

img_1.show()

img_2=img_1
pixels2 = img_2.load()
for j in range(img_2.size[0]):
for i in range(img_2.size[1]):
if i<size1+1:
pixels2[i,j] = pixels[i+1,j]
else:
pixels2[255,j] = pixels[0,j]
img_2.show()

这是我得到的错误:

Traceback (most recent call last):
File "C:\Users\spyrosamvra\Desktop\Image procesing\image_prosec.py", line 23, in <module>
pixels2[i,j] = pixels[i+1,j]
IndexError: image index out of range

如何解决此问题以正确转换图像,如上文所述?

最佳答案

绑定(bind)检查错误。您应该检查 size1-1,而不是 size1+1。此外,您将 255 硬编码为 else 情况下的列,但 size11024,因此更有意义只需使用 i 代替:

pixels2 = img_2.load()
for j in range(img_2.size[0]):
for i in range(img_2.size[1]):
if i < size1<b>-1</b>:
pixels2[i,j] = pixels[i+1,j]
else:
pixels2[<b>i</b>,j] = pixels[0,j]
img_2.show()

您可以使用模表达式进一步简化:

pixels2 = img_2.load()
for j in range(img_2.size[0]):
for i in range(img_2.size[1]):
pixels2[i,j] = pixels[<b>(i+1)%size1</b>,j]
img_2.show()

但是上面的方法仍然有效,因为在这里您将首先为一个像素分配一个值,稍后您将在第二次复制操作中使用该值。您可以通过将第一个像素存储在一个变量中来解决这个问题,然后再设置该变量,例如:

pixels2 = img_2.load()
for j in range(img_2.size[0]):
<b>first = pixels2[0,j]</b>
for i in range(img_2.size[1]<b>-1</b>):
pixels2[i,j] = pixels[<b>i+1</b>,j]
<b>pixels2[-1,j] = first</b>
img_2.show()

对于高级图像处理,使用像 opencv-python [PyPi] 这样的库可能更有意义.

关于python - 使用枕头的图像处理代码有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57017748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com