Python

파이썬, raw 이미지 출력하기

코딩ABC 2024. 12. 6. 12:11
반응형

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()

파이썬, raw 이미지 출력하기

 

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()

 

주의할 점

  1. 해상도와 포맷을 정확히 알아야 합니다.
    • 파일의 구조를 모르면 잘못된 이미지를 출력할 수 있습니다.
  2. 파일 크기로 해상도를 유추할 수 있습니다.
    • 예: 파일 크기가 1920×1080×11920 \times 1080 \times 1 (8비트 흑백)이면 2,073,600바이트(약 2MB)일 것입니다.
    • RGB 이미지라면 1920×1080×31920 \times 1080 \times 3 (24비트)이므로 약 6MB 크기일 것입니다.
  3. 이미지 크기를 잘못 지정하면 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()

파이썬, raw 이미지 출력하기

 

lena.raw
0.06MB

반응형