我试图将这个输入图像水平分割成三/四个大小相等的片段,但没有得到所需的输出。我不知道我做错了什么。 下面是我为拆分它而编写的代码:
import os.path
import numpy as np
from PIL import image
input_1 = "/home/task-1/split_operation/111.jpg"
outputPath = "/home/task-1/split_operation/"
im = Image.open(input_1)
x_width, y_height = im.size
split = np.int(x_width / 3)
outputFileFormat = "{0}-{1}.jpg"
baseName = "cropped_1"
for i in range(0, x_width, split):
x = split + i
box = (x, 0, x + split, y_height)
a = im.crop(box)
a.load()
outputName = os.path.join(outputPath, outputFileFormat.format(baseName, i + 1))
a.save(outputName, "JPEG")
输入图像:
我当前获得的输出图像:
正如您所看到的,最后两幅图像是黑色的。我不知道为什么我会得到一个黑色的图像
我假设图像的宽度是900px。 然后
split = 300
让我们看一下
for
循环的前几次迭代:i = 0; x = 300; x + split = 600
i = 300; x = 300 + 300 = 600; x + split = 900
... 李>如您所见,缺少部分图像(0 300px)。 它可以很容易地修复:
获取黑色图像的原因只是因为您试图访问不属于图像的像素
你的问题是当
i=0
你的第一个x
是split
这意味着你跳过了第一个图像。实际上,您可以看到第一个图像与原始图像的边缘不对齐。此外,您正在舍入像素以用作range
函数的步骤,但这会产生问题行为:图像的宽度为800
像素。这意味着您的split
是266
。这意味着最后的i
值将是798
,这就是为什么第三个图像在左边缘有一条2像素的细线更好的方法是使用^{} 生成所有“边”。这确保了图片的正确数量和正确的大小,而不必费心于
range
循环和width
计算。只需创建edges
列表并在循环中使用它,如下所示:其余的保持不变
使用
pictures = 3
运行此操作将产生:使用
pictures = 4
运行将产生:`
相关问题 更多 >
编程相关推荐