2017-10-26 2 views
1

먼저, 저는 AI의 대학 그룹에서 임무를 맏고 있습니다. PGM P2 (ASCII) 형식의 많은면이있는 데이터 세트가 있습니다. Neural Network 프로세스를 시작하기 전에 이미지에서 픽셀 배열을 추출해야하지만 파이썬에서 이러한 이미지를 읽을 수있는 방법을 찾지 못했습니다.Python에서 PGM P2 이미지를 읽는 방법

이미 PIL을 사용해 보았지만 PGM P2에서는 작동하지 않습니다.

파이썬에서이 작업을 수행 할 수 있습니까? 도움을 주시면 감사하겠습니다.

+0

가능한 복제 [일반 PGM 형식 PIL 이미지 필터를 작성하는 방법?] (https://stackoverflow.com/questions/4270700/how-to-write-pil-image-filter-for-plain -pgm-format) – Reti43

답변

0

답변하기에 조금 늦었지만 같은 문제가 발생하여 솔루션을 게시하는 것이 유용 할 수 있다고 생각했습니다. 파이썬에서 ASCII 기반의 PGM (P2)을 읽는 라이브러리가 존재하지 않는 것 같습니다.

다음은 파일의 이름을 취하여 다음을 포함하는 튜플을 반환합니다. (1) 데이터가있는 1xn 개의 numpy 배열, (2) 길이와 너비가 포함 된 튜플, (3) 회색 음영

import numpy as np 
import matplotlib.pyplot as plt 

def readpgm(name): 
    with open(name) as f: 
     lines = f.readlines() 

    # Ignores commented lines 
    for l in list(lines): 
     if l[0] == '#': 
      lines.remove(l) 

    # Makes sure it is ASCII format (P2) 
    assert lines[0].strip() == 'P2' 

    # Converts data to a list of integers 
    data = [] 
    for line in lines[1:]: 
     data.extend([int(c) for c in line.split()]) 

    return (np.array(data[3:]),(data[1],data[0]),data[2]) 

data = readpgm('./faces/an2i/an2i_right_sad_sunglasses.pgm') 

plt.imshow(np.reshape(data[0],data[1])) # Usage example 
관련 문제