2012-07-20 6 views
3

누구든지 파이썬을 사용하여 큰 이미지 파일을 여는 방법을 알고 있습니까? Windows 명령 프롬프트에서 ipython을 사용하여 이미지 파일 (약 2GB)을 열려고했으나 이미지 값을 배열로 변경하면 매번 충돌이 발생합니다.파이썬 배열로 큰 이미지 파일을 읽으십시오

내 노트북은 4GB RAM 및 Intel (R) Core (TM) i7-2860 QM CPU를 탑재 한 window7-64bit입니다.

오류 메시지 : python.exe가 작동을 멈췄습니다. 문제로 인해 프로그램이 올바르게 작동하지 않습니다. Windows가 프로그램을 종료하고 솔루션을 사용할 수있는 경우 알려줍니다.

여기 내 코드입니다.

import Image 
import numpy as num 
im=Image.open('myimage.tif') 
imarray=num.array(im) 
+1

어떻게 충돌합니까? MemoryError가 발생합니까? 파이썬은 어떤 종류의 피드백을 주나요? – mgilson

+0

나는 그렇다고 생각한다.numpy와 Image를 사용하여 다른 작은 이미지를 성공적으로 읽습니다. – Vicky

+2

파이썬이 32 비트 모드가 아닌 상당히 큰 것을 처리 할 수 ​​있는지는 잘 모르겠습니다. –

답변

7

얼마나 많은 RAM이 있습니까? 2-gig 이미지를 저장하려면 2GB 이상의 RAM이 필요합니다. Image이 이미지를 저장하는 데 얼마나 효율적인지 알지 못하지만 바이트 목록에 네 개의 바이트의 공간이 사용되므로 8GB 이상의 (가상) 메모리를 구울 수 있습니다. 많은 인내심. 편집 : 당신은 단지 4 (또는 3) GB 밖에 가지고 놀지 않기 때문에 이것은 거의 확실하게 당신의 문제입니다.

하지만 왜 숫자 배열로 변환하려고합니까? PIL Tutorial처럼 Image.open에 의해 반환 된 im 개체의 메서드를 사용합니다.

나는 당신이 이미지로 무엇을하고 있는지 알지 못하지만 아마도 메모리에있는 전체 이미지를 읽지 않거나 적어도 전체 객체를 numpy 배열로 변환하지 않고서도 할 수있을 것입니다. 가능하다면 비트 단위로 읽어서 컴퓨터가 날아 가지 않도록하십시오. 파이썬 생성기를 읽어보고 Image.getdata() 메서드를 참조하십시오.이 메서드는 한 번에 한 픽셀 씩 값을 반환합니다.

2

numpy를 PIL과 함께 사용하는 것에 대해 잘 모르겠지만 여기 픽셀 데이터를 배열로 읽는 방법입니다 (.jpg 이미지 사용). 과거에는 이것이 잘 돌아 갔지만, 나는 이것을 거대한 images, 와 함께 시도했다고 생각하지 않습니다. 문제가 메모리 문제에 쏟아 질 수 있습니다. 이런

import Image 
im = Image.open('pic.jpg') 

pix_ar = im.load()  # load image into 2D array 
red_pixel = 255, 0, 0 # a red RGB pixel 

액세스 개별 요소 :

x = 10 
y = 5 
print pix_ar[x, y] 
(255, 255, 255) 

또는 할당 값

pix_ar[x, y] = red_pixel 

다시 메모리 : 2GB의 이미지 훨씬 이상의 RAM 복용 끝날 수도 개별 픽셀 값으로 "압축이 풀린"후 2GB 이상 데이터 구조가 얼마나 효율적인지에 따라 데이터 구조가 얼마나 효율적인지에 따라 달라집니다. 이 대용량 파일을 메모리로 읽으려고하면서 동시에 OS와 다른 응용 프로그램을 동시에 실행하는 경우 4GB RAM이 충분하지 않을 수도 있습니다.

또한 PIL로 열린 파일을 이전에 numpy로 성공적으로 전송/읽은 경우 위 코드가 도움이되지 않을 수 있습니다.

+0

귀하의 코드를 시도했지만 im.load()를 실행할 때 여전히 충돌합니다. 내 노트북에는 4GB RAM이 있습니다. 기억의 문제가 아닌 것 같습니다. – Vicky

+0

@ VickyYan-tingLiau OS, 다른 응용 프로그램을 실행하고 2GB 이미지를 열려고해도 4GB는 그리 큰 문제가 아닙니다. ** 정확한 ** 오류 메시지는 무엇입니까? 원본 질문의 일부로 게시하면 의견을 읽기가 어려울 수 있습니다. 더 많은 세부 사항을 아는 것이 도움이 될 것입니다. – Levon

+0

@ VickyYan-tingLiau OS 및 버전을 포함 할 수도 있습니다. 예를 들어 Windows XP 32 비트는 4GB가 설치되어 있어도 3GB 이상의 RAM에 액세스 할 수 없습니다. 64 비트 버전의 OS에는 특별한 문제가 없습니다. – Levon

관련 문제