Python 을 사용 하여 바 이 너 리 파일 의 인 스 턴 스 설명 을 읽 습 니 다.

2440 단어 Python2 진법문건
대상:대상 파일 은 float 32 형 으로 저 장 된 바 이 너 리 파일 로 열 우선 순위 에 따라 저 장 됩 니 다.본 고 는 Python 을 사용 하여 이 바 이 너 리 파일 을 읽 고 matplotlib.pyplot 관련 도 구 를 사용 하여 그림 을 그립 니 다.
도구:Python 3,matplotlib,os,struct,numpy
1.바 이 너 리 파일 읽 기
먼저 open 함수 로 파일 을 열 고 모드 를 열 어 바 이 너 리 를 선택 하여"rb"를 읽 습 니 다.

f = open(filename, "rb")
두 번 째 단 계 는 행렬 에 따라 파일 을 읽 는 것 을 열 어야 합 니 다.순수 바 이 너 리 파일 이기 때문에 내부 에 데이터 구조 정 보 를 포함 하지 않 습 니 다.따라서 바 이 너 리 데이터 의 줄 수열 수(nx 와 ny)를 지정 하여 이미지 의 모양 을 확인 해 야 합 니 다.여기 서 우리 의 데이터 형식 은 float 32 형 이 고 대응 하 는 것 은 4bytes 이 며 for 순환 을 사용 하여 각각 read 4 바이트 입 니 다.

for i in range(nx):
 for j in range(ny):
  data = f.read(4)
얻 은 결 과 는 다음 과 같다.

b'5\x9d\x82\xc3'
b'\xb1\x04\x10\xc4'
b'\xc1\x9eD\xc4'
b'a\x86R\xc4'
b'\x15\x01=\xc4'
읽 은 데 이 터 는 16 진수 이 며,이때 의 데 이 터 는 그림 을 그 리 는 데 직접 사용 할 수 없 으 며,float 32 형 으로 변환 해 야 합 니 다.여 기 는 struct.unpack 을 사용 하여 번역 합 니 다.

data_float = struct.unpack("f", data)[0]
정확 한 결 과 를 얻 을 수 있 을 거 예요.

-261.2281799316406
-576.0733032226562
-786.4805297851562
-842.0996704101562
-756.0169067382812
numpy 배열 을 만 들 고 읽 은 데 이 터 를 각각 열 우선 순위 로 배열 에 넣 으 면 그림 읽 기 작업 이 완 료 됩 니 다.
상기 조작 을 함수 로 포장 하고 코드 는 다음 과 같 습 니 다.

def xshow(filename, nx, nz):
 f = open(filename, "rb")
 pic = np.zeros((nx, nz))
 for i in range(nx):
  for j in range(nz):
   data = f.read(4)
   elem = struct.unpack("f", data)[0]
   pic[i][j] = elem
 f.close()
 return pic
2.그림 그리 기
여기 서 우리 의 목적 은 행렬 을 그 레이스 케 일 그림 으로 출력 하고 tiff 형식의 이미지 로 저장 하 는 것 입 니 다.효과 도 는 다음 과 같 습 니 다.(이 그림 은 탄성 파 파동 방정식 을 사용 하여 Marmousi 모델 에서 의 파장 스냅 샷 입 니 다)

좌표 축 정보 가 필요 없 이 imsave 명령 을 직접 사용 하고 cmap 로 색상 형식 을 선택 하면 됩 니 다.

plt.imsave('output.tiff', img, format='tiff', cmap=plt.cm.gray)
PIL 라 이브 러 리 로 그림 을 읽 으 면 다른 효 과 를 얻 을 수 있 고 직사 도 균형 을 맞 춰 야 할 수도 있 으 며 원인 을 찾 지 못 했 습 니 다.

파 이 썬 을 사용 하여 바 이 너 리 파일 을 읽 는 인 스 턴 스 설명 은 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기