본문 바로가기
데이터 어쩌구/전처리 및 시각화

[Numpy] 이미지 array (3, 4차원) 다루기

by annmunju 2023. 8. 26.

1. Array 다루기

  • 3차원 배열(RGB)의 조건부 수정
  • # array.shape : (1024, 12xx, 3) -> [[[0, 0, 0], [ ... ]]] array[(array.sum(axis=-1) == 0)] = 255 # [[[0, 0, 0], [ ... ]]] 경우에서 # [0, 0, 0](검은색) 한 묶음으로 더해지는데 값이 0인 경우 → [255, 255, 255](흰색)으로 수정
  • 두 배열 동일한지 여부 (비교) np.array_equal(a1, a2, equal_nan=False)
  • 요소 별 곱셈 * or np.multiply()

2. 이미지↔ 픽셀 (OpenCV, PIL)

  • 이미지를 픽셀로 보기 (OpenCV)
img = cv2.imread(img_name)
  • 이미지를 픽셀로 보기 (PIL.Image)
img = Image.open(img_name)

# 이미지를 array로 보기 
img_array = np.array(img)

# array를 이미지로 전환
img = Image.fromarray(img_array)
  • 프레임 단위로 이미지를 읽는 경우 (PIL.Image)
img = Image.seek(img_name)
  • 이미지 영역에 대한 통계 계산 (픽셀 통계 계산) : PIL.ImageStat 모듈 - Doc
  • RGBA → RGB : 형식 변환 (OpenCV)
    • cv2.cvtColor()
# OpenCV
img = cv2.cvtColor(src, RGBA2RGB)

# PIL Image
img = Image.open().convert("RGB")

3. Image 보기

  • 이미지 하나만 확인해보기 (PIL.Image)
Image.fromarray(array)
  • 이미지 여러장 한번에 보기 (matplotlib.pyplot)
fig, axes = plt.subplots(1,2,figsize=(26, 6))

img1 = Image.fromarray(array1)
axes[0].axis('off') # 축 숨기기
axes[0].imshow(img1)

img2 = Image.fromarray(array2)
axes[1].axis('off')
axes[1].imshow(img2)
  • → 테두리 주위의 공백을 없애기 위해savefig()메서드에서bbox_inches = 'tight'를 설정
  • → 이미지 주변의 흰색 테두리를 제거하려면savefig()메서드에서pad_inches = 0을 설정
728x90