파이썬 - 도구 :도는도 1의 조합보다 패널 큰, 대형 패널에 슬라이스.

교육 keras은 여전히 (I 사진은 8192 × 8192 큰 그림 == 64M입니다) 사진에 맞는 .fit의 .fit_generator 후 메모리가 부족 문제가 발생했습니다. 그래서 솔루션이 큰지도 작은지도를 절단하는 것입니다, 훈련을 던지는 작은 그림은, 밖으로지도의 실행 후 큰 이미지를 구성하는

그것은이 발견 된 나의 keras (win10 - 16G 메모리) 단지 (2048 × 4 == 1,600 × 2,048) 네 개의 패널까지 가자,

더 많은 출구가 주어집니다 : 4831838208의 할당은 시스템 메모리의 10 %를 초과합니다.

그 이유는 이러한 수치 NumPy와 별도로 자체를 유지하기 위해 아마, 교육 추가 소비에 해당됩니다 keras

도 대형 패널로 썰어

'' 
작은 이미지 (16)의 소정 수로 절단 픽처 0.bmp 읽 
폴더 명 OUT을 
'' ' 
에서 PIL 오기 이미지
 오기 SYS, 운영체제 
cut_num = 4 # 4 * 4 = 16 픽처 
# 것 채워진 정사각형 이미지 
DEF의 fill_image (화상) 
    폭, 높이 = image.size의    
     # 선택된 길이와 새로운 이미지로 큰 값의 폭 
    new_image_length 폭 = IF 폭> 높이 사람의 높이    
     #은 새로운 영상을 생성한다 [화이트] 
    # new_image = Image.new (image.mode (new_image_length, new_image_length), 컬러 = '화이트')     
    new_image =Image.new (image.mode (new_image_length, new_image_length))
     #가 이전 중앙도도 새로운에 붙인 
    경우 폭> 신장 #의 높이보다 넓은 화상, 화상의 수직 치수가 채워 
    #를 (X, Y )도 튜플에 붙여도의 개시의 상대적인 위치를 나타내고, 
        - new_image.paste (높이) / 2 화상 (0, INT ((new_image_length )))
     다른 : 
        new_image.paste (이미지 (INT ((new_image_length를 - 폭) / 2 ), 0))    
     반환 new_image
 # 접선도 
데프 ) cut_image (이미지 : 
    폭, 높이 = image.size 
    item_width = INT (폭 / cut_num) 
    box_list = []    
     #(하부 우측, 상단 좌측) 
    에 대한 I 에서 (cut_num 0) 범위 : #를 两重循环,生成图片基于原图的位置
         J 범위 (0, cut_num) :           
             #의 인쇄 ((나는 item_width을 * J * item_width, (I + 1) * item_width, (j + 1) * item_width)) 
            상자 = (j의 *의 item_width 난 item_width, (j + 1) * item_width, (I + 1) * item_width) 
            box_list.append을 (박스) 

    image_list [image.crop (박스) =  상자 box_list]    
     복귀 image_list의
 # 保存
DEF save_images (image_list) 
    인덱스 = 1 
     이미지 에서 image_list : 
        image.save ( " OUT / ' + STR (색인) + ' .BMP를 ' , ' BMP ' ) 
        지수 + = 1 의 경우 __name__ == ' __main__ ' : 
    FILE_PATH = " 0.bmp " 
    os.mkdir ( " 아웃 " ) 
    이미지 = Image.open (FILE_PATH)   
     #에 image.show () 
    이미지 = fill_image (화상) 
    image_list =

 cut_image (이미지) 
    save_images (image_list)

 

 

 

도 조합의 패널보다 둘째, 큰

'' ' 
큰 화상 형성하도록 함께 이미지 내부 지정된 폴더를 
' 
오기 PIL.Image AS 이미지
 오기 OS의 
 
IMAGES_PATH = ' OUT \\ '   #의 포토 설정 어드레스 
IMAGES_FORMAT = ' .BMP를 ' , ' .BMP ' ]   #의 이미지 형식 
IMAGE_SIZE = 2048   # 사진의 각 작은 크기의 
이미지 ~ = 4   #의 사진 간격, 즉, 한 장의 사진으로 합병 후, 몇 줄이 있습니다 
IMAGE_COLUMN = 4   # 사진 간격이, 그는 몇 가지의 총 후지도에 병합됩니다 열 
IMAGE_SAVE_PATH = ' final.bmp '   # 주소 변환 사진 후 
 
#는 사진 갤러리 주소에있는 모든 사진의 이름을 얻을
image_names = [이름 에 대한 이름  os.listdir (IMAGES_PATH)  부품  IMAGES_FORMAT IF 
               os.path.splitext (이름) . 1] == 아이템] 
 
# 간단한 숫자 판정 화상 크기 설정에서 수행되는 실제 파라미터 세트 
IF LEN (image_names) = 화상 ~ *! IMAGE_COLUMN :
     인상 ValueError를가 ( " ! 파라미터 합성 화상의 요건의 수가 일치하지 않음 " ) 
 
#을 이미지 스티칭 함수 정의 
데프 ) (image_compose을 : 
    to_image = Image.new ( ' RGB ' (IMAGE_COLUMN을 IMAGE_SIZE *는 이미지 ~ * IMAGE_SIZE)) #은 새로운 맵 생성 
    #을루프를 통해, 대응하는 위치에 접착 각 이미지에 순서 
    를 위해 Y  범위 (. 1 화상 ~ + 1이다. )
         에 대한 X  범위 (1 ,. 1 IMAGE_COLUMN의 +. ) 
            from_image = Image.open (IMAGES_PATH + image_names [IMAGE_COLUMN * (Y -. 1) + X -. 1 ])은 크기 조정 (. 
                (IMAGE_SIZE, IMAGE_SIZE) Image.ANTIALIAS) 
            to_image.paste (from_image ((X -. 1) * IMAGE_SIZE (Y -. 1) * IMAGE_SIZE)) 
    to_image = to_image.convert ( ' L ' )
     복귀 to_image.save (IMAGE_SAVE_PATH) #가 새로운 무화과 저장 
image_compose ()를 #의 통화 기능

 그래서 .... 000 102 111 213 번호순 파일명 참고 ...

추천

출처www.cnblogs.com/dzzy/p/11401800.html