如何在Python中将图像分割成多个部分

2024-05-16 02:16:48 发布

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

我正试图用PIL把一张照片分成多张。

def crop(Path,input,height,width,i,k,x,y,page):
    im = Image.open(input)
    imgwidth = im.size[0]
    imgheight = im.size[1]
    for i in range(0,imgheight-height/2,height-2):
        print i
        for j in range(0,imgwidth-width/2,width-2):
            print j
            box = (j, i, j+width, i+height)
            a = im.crop(box)
            a.save(os.path.join(Path,"PNG","%s" % page,"IMG-%s.png" % k))
            k +=1

但似乎没用。它可以分割照片,但不能完全分割(你可以试试)。


Tags: pathincropforinputsizepagerange
3条回答

将图像分割为MxN像素的平铺(假设im为numpy.ndarray):

tiles = [im[x:x+M,y:y+N] for x in range(0,im.shape[0],M) for y in range(0,im.shape[1],N)]

如果要将图像分割为四部分:

M = im.shape[0]//2
N = im.shape[1]//2

平铺[0]容纳左上方的平铺

from PIL import Image

def crop(path, input, height, width, k, page, area):
    im = Image.open(input)
    imgwidth, imgheight = im.size
    for i in range(0,imgheight,height):
        for j in range(0,imgwidth,width):
            box = (j, i, j+width, i+height)
            a = im.crop(box)
            try:
                o = a.crop(area)
                o.save(os.path.join(path,"PNG","%s" % page,"IMG-%s.png" % k))
            except:
                pass
            k +=1

编辑:我相信这个答案忽略了将图像切成列和行的矩形的意图。这个答案只排成几行。它看起来像是其他答案被切成了列和行。

比所有这些都简单的是使用别人发明的轮子:)安装起来可能更复杂,但使用起来很快。

这些说明是针对Windows7的;它们可能需要适应其他操作系统。

here获取并安装pip。

下载安装档案,并将其解压缩到您的根Python安装目录。打开控制台并键入(如果我没记错的话):

python get-pip.py install

然后在控制台输入以下命令,通过pip获取并安装映像切片器模块:

python -m pip install image_slicer

将要分割的图像复制到Python根目录中,打开Python shell(而不是“命令行”),然后输入以下命令:

import image_slicer
image_slicer.slice('huge_test_image.png', 14)

这个模块的优点在于

  1. 安装在python中
  2. 可以用两行代码调用图像分割
  3. 接受任意偶数作为图像切片参数(例如本例中的14)
  4. 接受该参数并自动将给定图像分割成多个切片,然后自动将生成的编号平铺保存在同一目录中,最后
  5. 有一个将图像平铺缝合在一起的函数(我还没有测试);文件显然必须以测试image_slicer.slice函数后在分割文件中看到的约定命名。

相关问题 更多 >