5

이미지가 가득 찬 폴더가 각 이미지에 4 개 이상의 작은 이미지가 포함되어 있습니다. 필자는 Python PIL을 사용하여 작은 이미지를 잘라내어 모두 독립적 인 이미지 파일로 존재하게하는 방법을 알고 싶습니다. 다행스럽게도 하나의 상수가 있습니다. 배경은 흰색 또는 검정색이므로, 내가 필요로하는 것은 행 또는 바람직하게는 완전히 검은 색 또는 완전히 흰색 인 열을 검색하여 이러한 이미지를 잘라내는 방법입니다. 여기에 예제 이미지가 있습니다. : 위의 이미지 PIL로 자동 자르기 이미지

enter image description here

10 개 별도의 이미지들을 포함하는 각있을 것이다. 미리 감사드립니다.

편집 : 일부 작은 이미지의 배경이 포함 된 이미지의 배경과 같은 색이라는 의미에서 더 현실적인 다른 샘플 이미지가 있습니다.

enter image description here

있는 13 개 별도의 이미지되고, 각각의 라벨에 대한 scipy.ndimage를 사용하여 한 편지

+0

자르기에 비슷한 질문이 이전 요청합니다 ... http://stackoverflow.com/questions/1076638/trouble-using-python-pil-library-to-crop-and-save-image 올바른 좌표가 자동 자르기와 같이 작동하도록 변경하는 루프에이 코드를 넣을 수 있습니다. – AurA

+0

답장을 보내 주셔서 감사합니다하지만 자르기 상자는 pred에서 작동합니다. x, y 좌표를 정의했다. 앞에서 언급했듯이, 유일한 상수는 배경색이 흑백의 전체 열을 떠나는 것입니다. 그렇게하는 것보다 수동으로하는 것이 더 빠를 것입니다. –

+0

일부 루프 아래에 넣고 좌표를 기본적으로 왼쪽 좌표로 증가시킵니다. 수동 조작보다 빠르기를 바랍니다. 코드가 준비되면 n 개의 이미지에 적용 할 수 있습니다. – AurA

답변

1

을 containng 출력 :

import numpy as np 
import scipy.ndimage as ndi 
import Image 

THRESHOLD = 100 
MIN_SHAPE = np.asarray((5, 5)) 

filename = "eQ9ts.jpg" 
im = np.asarray(Image.open(filename)) 
gray = im.sum(axis=-1) 
bw = gray > THRESHOLD 
label, n = ndi.label(bw) 
indices = [np.where(label == ind) for ind in xrange(1, n)] 
slices = [[slice(ind[i].min(), ind[i].max()) for i in (0, 1)] + [slice(None)] 
      for ind in indices] 
images = [im[s] for s in slices] 
# filter out small images 
images = [im for im in images if not np.any(np.asarray(im.shape[:-1]) < MIN_SHAPE)] 
+0

Nicolas에게 감사드립니다. 위의 코드는 첫 번째 예제 이미지에서 훌륭하게 작동합니다. 불행히도 저는 ' 내가 오랫동안 추가하지 않은 두 번째 이미지와 함께 작동하도록 조정할 것 같습니다. 조언을 주시면 감사하겠습니다. 고마워요. –