image를 구성하는 가장 작은 단위

image를 pixel로 구현할 때 많이 사용하는 모듈
- matplotlib
- Pillow
# image를 pixel로 표현
# 가장 대표적인 module이 matplotlib library
# Pillow라는 module도 많이 이용
# 모듈 임포트
import numpy as np
from PIL import Image # Pillow library를 사용해 image를 pixel data, 즉 ndarray로 쉽게 변환 가능
import matplotlib.pyplot as plt
# image 불러오기
img = Image.open('/content/drive/MyDrive/AI_school_ML/image/justice.jpg')
# image 확인
plt.imshow(img)
plt.show() # 이미지 좌표계 출력 확인!

image 객체를 ndarray로 변환
# image 객체를 ndarray로 변환!
# image는 pixel의 집합이예요! 각 pixel은 3개의 값으로 구성
# 따라서 모든 image(컬러, 흑백)는 기본적으로 3차원 데이터
pixel = np.array(img)
print(pixel.shape) # (426, 640, 3) == (높이, 너비, 차원) == (행, 열, 차원)
image 자르기
.crop(): 튜플 형태로 좌표 지정 (left, top, right, bottom)
left : 상자의 왼쪽 가장자리의 x 좌표
top : 상자의 윗부분 가장자리의 y 좌표
right : 상자의 오른쪽 가장자리의 x 좌표
bottom : 상자의 아래부분 가장자리의 y 좌표
# image 자르기
crop_img = img.crop((30, 100, 150, 300)) # 튜플 형식으로 좌표를 지정해줘야 함
plt.imshow(crop_img)
plt.show()

image 사이즈 조정
.resize() : 튜플형태로 조정할 크기 지정
# image 사이즈 조정
resize_img = img.resize((100,100))
plt.imshow(resize_img)
plt.show()

image 회전
.rotate() : 회전각 지정
# 이미지 회전
rotate_img = img.rotate(180) # 180도 회전
plt.imshow(rotate_img)
plt.show()

image 불러오기 및 pixel data 추출 과정은 동일
# 모듈 임포트
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
# 이미지 불러오기 및 확인
color_img = Image.open('/content/drive/MyDrive/AI_school_ML/image/fruits.jpg')
plt.imshow(img)
plt.show()
# 이미지 pixel 정보를 3차원 ndarray로 추출
color_pixel = np.array(color_img)
plt.imshow(color_pixel) # 픽셀 데이터도 그림이 잘 나타남을 확인
plt.show()
반복문을 사용해 각 pixel의 RGB 값의 평균을 구해서 RGB값을 평균값으로 각각 세팅
픽셀데이터.shape ➡ (높이, 너비, 차원) 출력
# 흑백처리!
print(color_pixel.shape) # (426, 640, 3) == (높이, 너비, 차원)
# color_pixel의 복사본을 만들어 gray_pixel에 저장(원본 image 변경X)
gray_pixel = color_pixel.copy()
# 흑백처리 반복문
# 각 pixel의 RGB 값의 평균을 구해서 RGB값을 평균값으로 각각 세팅
for y in range(gray_pixel.shape[0]): # (426, 640, 3)에서 426 / 즉, 이미지의 높이에 대한 반복문
for x in range(gray_pixel.shape[1]): # (426, 640, 3)에서 640 / 즉, 이미지의 너비에 대한 반복문
gray_pixel[y,x] = int(np.mean(gray_pixel[y,x])) # 현재 픽셀의 RGB 값을 해당 픽셀 RGB 값의 평균으로 설정
plt.imshow(gray_pixel)
plt.show()

흑백이미지는 2차원으로도 표현 가능
# 이번에는 3차원 흑백 이미지를 2차원으로 표현
# 3차원 이미지인 gray_pixel[높이,너비, 차원(RGB의 3차원)]에서
gray_2d_pixel = gray_pixel[:, :, 0] # 높이는 전부(:), 너비도 전부(:), 차원은 R값만 가져오기
# 2차원 흑백 이미지를 그릴 때에는 cmap을 gray로 설정해야 함
plt.imshow(gray_2d_pixel, cmap = 'gray') # (matplotlib은 원래 3차원을 받으니까 2차원임을 알려줘야 함)
plt.show()

✅ 반복문 추가 설명
- gray_pixel[y, x]: 배열 gray_pixel에서 위치 (y, x)에 해당하는 픽셀을 나타냄
- gray_pixel[y, x] = int(np.mean(gray_pixel[y, x])): 현재 픽셀의 RGB 값을 해당 픽셀의 RGB 값의 평균으로 설정. np.mean(gray_pixel[y, x])는 해당 픽셀의 세 가지 색상 채널(R, G, B)의 평균값을 반환