반응형
raw 파일을 출력하려면 파일의 이미지 해상도와 데이터 형식(예: 흑백/컬러, 8비트/16비트 등)을 알아야 합니다. 이 정보가 필요 없는 경우 데이터를 잘못 해석할 수 있습니다.
아래는 "lena.raw" 파일이 **흑백 이미지(8비트)**이고, 해상도가 256x256이라고 가정한 예입니다.
1. "sample.raw" 파일 읽어서 흑백 이미지 출력
import numpy as np
import matplotlib.pyplot as plt
# RAW 파일 설정
file_path = "c:/temp/lena.raw"
width, height = 256, 256 # 이미지 해상도
# RAW 파일 읽기
with open(file_path, 'rb') as f:
raw_data = np.fromfile(f, dtype=np.uint8) # 8비트 데이터
raw_image = raw_data.reshape((height, width)) # 해상도에 맞게 배열 변환
# 이미지 출력
plt.imshow(raw_image, cmap='gray') # 흑백 이미지를 위한 cmap
plt.axis('off') # 축 제거
plt.show()
2. 컬러 이미지(RGB, 24비트) 가정
만약 sample.raw가 RGB 컬러 이미지라면, 데이터를 (height, width, 3)으로 재구성해야 합니다.
# RAW 파일 설정
file_path = "sample.raw"
width, height = 256, 256 # 이미지 해상도
# RAW 파일 읽기
with open(file_path, 'rb') as f:
raw_data = np.fromfile(f, dtype=np.uint8)
raw_image = raw_data.reshape((height, width, 3)) # RGB로 재구성
# 이미지 출력
plt.imshow(raw_image) # 컬러 이미지는 cmap 필요 없음
plt.axis('off')
plt.show()
주의할 점
- 해상도와 포맷을 정확히 알아야 합니다.
- 파일의 구조를 모르면 잘못된 이미지를 출력할 수 있습니다.
- 파일 크기로 해상도를 유추할 수 있습니다.
- 예: 파일 크기가 1920×1080×11920 \times 1080 \times 1 (8비트 흑백)이면 2,073,600바이트(약 2MB)일 것입니다.
- RGB 이미지라면 1920×1080×31920 \times 1080 \times 3 (24비트)이므로 약 6MB 크기일 것입니다.
- 이미지 크기를 잘못 지정하면 reshape에서 오류가 발생합니다.
해상도나 포맷 정보를 모르시는 경우 파일의 크기를 계산하여 추정한 뒤 코드를 작성할 수 있습니다. 파일 크기 확인 방법도 알려드릴 수 있습니다!
3. 이진 파일로 읽어서 출력
from tkinter import *
w, h = 256, 256
## 메인 코드 ##
window=Tk()
window.title("흑백 RAW 이미지")
canvas = Canvas(window, height=h, width=w)
paper=PhotoImage(width=w, height=h)
canvas.create_image( (w/2, h/2), image=paper, state="normal")
fp = open('c:/temp/lena.raw', 'rb')
for i in range(0, w) :
for k in range(0, 256) :
data = int(ord(fp.read(1)))
paper.put("#%02x%02x%02x" % (data,data,data) , (k, i))
fp.close()
canvas.pack()
window.mainloop()
반응형
'Python' 카테고리의 다른 글
파이썬: 테트리스 소스 (1) | 2024.12.18 |
---|---|
파이썬, 문장에서 단어별 빈도수 카운트 Counter collections (0) | 2024.11.19 |
(파이썬) 사각형 그리기: 색상으로 채우기, turtle.setheading (0) | 2024.07.27 |
(파이썬) calendar 모듈로 2024년 달력 출력하기 (0) | 2024.07.05 |
(파이썬) 워드 클라우드(word cloud) 만들기 (0) | 2024.07.03 |