pi在图像处理代码中的应用问题

2024-09-27 19:25:40 发布

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

我试图创建一个过滤器来移动图片。 示例:第一个像素从下一个像素获取颜色,但最后一个像素从第一个像素获取颜色。你知道吗

我尝试用python3.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()

回溯(最近一次呼叫): 文件“C:\Users\spyrosamvra\Desktop\Image Processing\Image_专业人员,第23行,在 像素2[i,j]=像素[i+1,j] 索引器:图像索引超出范围


Tags: inimageimport过滤器imgforsizeshow
2条回答

装订好的支票错了。您应该检查size1-1,而不是size1+1。此外,在else的情况下,您将255硬编码为列,但是size11024,因此只使用iinsteat更有意义:

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[i,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[(i+1)%size1,j]
img_2.show()

然而,上述方法仍然不起作用,因为在这里您将首先为稍后用于第二次复制操作的像素赋值。您可以通过将第一个像素存储在变量中,然后设置该变量来解决此问题,如:

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

但是,对于高级图像处理,使用像^{} [PyPi]这样的库可能更有意义。你知道吗

滚动图像有比使用for循环更好的方法。你知道吗

您可以转换为Numpy数组并使用Numpy的roll()documentation如下(未测试):

from PIL import Image
import numpy as np

# Load image and make Numpy version
im = Image.open('start.png')
numpyIm = np.array(im)

# Roll image
rolled = np.roll(numpyIm,1,1). # change first 1 to alter distance, change second 1 to alter direction

# Convert Numpy image back to PIL Image
pilIm = Image.fromarray(rolled)

或者可以使用here中的PIL示例。你知道吗

相关问题 更多 >

    热门问题