保存图像期间,PIL中的“SystemError:tile无法扩展到图像外部”

问题描述 投票:3回答:2

我有这个Image =>

enter image description here

这里是用3.txt文件写的上面黄色框的所有坐标。

#Y   X Height     Width 

46 135 158 118 
46 281 163 104 
67 494 188 83 
70 372 194 101 
94 591 207 98 
252 132 238 123 
267 278 189 105 
320 741 69 141 
322 494 300 135 
323 389 390 124 
380 726 299 157 
392 621 299 108 
449 312 227 93 
481 161 425 150 
678 627 285 91 
884 13 650 437 
978 731 567 158 
983 692 60 43 
1402 13 157 114 

我的目的是裁剪这些盒子并将所有盒子保存为Image。我已经为此编写了代码,但却收到了错误。

这是我的代码=>

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
from os import listdir
#from scipy.misc import imsave

ARR = np.empty([1,4])
# print(ARR)

i = 0
k = 0
img = Image.open('3.png')

fo = open("3.txt", "r")
for line in fo:
    if not line.startswith('#'):
        for word in line.split():

            ARR[0][i] = int(word)
            print(int(word))
            # ARR[0][i] = int(word)
            i = i +1

    img2 = img.crop((int(ARR[0][1]), int(ARR[0][0]), int(ARR[0][0] + ARR[0][2]), int(ARR[0][1] + ARR[0][3])))
    name = "new-img" + str(k) + ".png"
    img2.save(name)
    k = k + 1
    i = 0

我收到这些错误=>

回溯(最近一次调用最后一次):文件“reshape.py”,第26行,在img2.save(name)文件“/usr/lib/python2.7/dist-packages/PIL/Image.py”,第1468行,在save save_handler(self,fp,filename)文件“/usr/lib/python2.7/dist-packages/PIL/PngImagePlugin.py”,第624行,在_save ImageFile._save(im,_idat(fp,chunk)中, [(“zip”,(0,0)+ im.size,0,rawmode)])文件“/usr/lib/python2.7/dist-packages/PIL/ImageFile.py”,第462行,在_save e中.setimage(im.im,b)SystemError:tile无法扩展到图像外部

我该如何解决这些问题?

python image image-processing computer-vision
2个回答
4
投票

参考注释,由于坐标不正确地传递给PIL的crop()函数而发生错误。

正如在the documentation中提到的,该函数返回一个四元组的图像(xywidthheight)。

在给定的文本文件中,第一列中提到了y坐标,第二列中提到了x坐标。然而,crop()函数接受x坐标的值作为第一个参数,y坐标作为第二个参数。

这同样适用于OpenCV

这是ANOTHER POST相同的。


0
投票

在我的情况下,问题是我指定了开始X和开始Y的开始和结束坐标并不总是小于结束X和Y.你不能这样做。

例如,

开始:(0,50)结束:(50,0)

这些坐标对我来说很有意义,但实际应该指定为:

开始:(0,0)结束:(50,50)

视觉上是相同的矩形,但后者是枕头需要裁剪的。

© www.soinside.com 2019 - 2024. All rights reserved.