일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- docker attach
- 티스토리챌린지
- cocre
- 기초확률론
- WSSS
- HookNet
- cs231n
- airflow
- 코크리
- 사회조사분석사2급
- CellPin
- 히비스서커스
- 백신후원
- numpy
- AIFFEL
- Multi-Resolution Networks for Semantic Segmentation in Whole Slide Images
- docker exec
- vscode
- logistic regression
- Decision Boundary
- 프로그래머스
- ssh
- Pull Request
- IVI
- Jupyter notebook
- 도커
- GIT
- aiffel exploration
- docker
- 오블완
Archives
- Today
- Total
히비스서커스의 블로그
[Numpy] numpy로 이미지 처리하기 본문
728x90
파이썬으로 작업을 하다보면 numpy를 쓸 일이 정말 많은 것 같다. 사실 numpy를 많이 써보긴 하였으나 깊게 파면서 직접 코드를 짜본 적은 없는 것 같다. 하지만 이미지처리나 딥러닝을 python으로 잘 활용하기 위해서는 numpy를 잘 활용하는 것이 중요한 것 같다.
이번에는 이미지 분류를 하기 위해서 이미지의 라벨링을 하는 것과 배치 처리를 하는 여러 방법들 중 numpy를 활용한 방법을 정리해보았다.
먼저 이미지를 넣을 array를 x, 라벨을 넣을 array를 y로 하여 만들어준다.
import numpy as np
number_of_data = 1300 # 데이터 수
img_size = 256 # 이미지의 사이즈 (정사각형으로 간주)
color = 3 # 컬러는 3, 흑백은 1
batch_size = 32 # 배치사이즈
# 곱셈의 형태로 만들기
x = np.zeros(number_of_data*img_size*img_size*color, dtype=np.int32).reshape(number_of_data, img_size, img_size, color)
y = np.zeros(number_of_data, dtype=np.int32)
# 덧셈의 형태로 만들기
x = np.zeros((number_of_data,) + (img_size, img_size) + (color,), dtype="float32")
y = np.zeros((number_of_data,) + (1,), dtype="uint8")
두 형태의 shape은 모두
x shape = (1300, 256, 256, 3)
y shape = (1300, 1)
의 형태로 같다.
이제 x에는 이미지의 픽셀값을, y에는 라벨링을 넣을 것이다.
import glob
import PIL
import cv2
file_path = '~/image_path'
# PIL을 활용한 방법
i = 0
for file in sorted(glob.glob(file_path + '/normal/*.png'):
img = np.array(Image.open(file), dtype=np.int32) # PIL로 불러들인 이미지를 numpy array에 입력
x[i, :, :, :] = img # i번째에 이미지 픽셀값 입력
y[i] = 0 # i번째에 normal을 0으로 라벨링
i += 1
for file in sorted(glob.glob(file_path + '/cpe/*.png'):
img = np.array(Image.open(file), dtype=np.int32)
x[i, :, :, :] = img
y[i] = 1
i += 1
x = x/255.0 # 이미지 정규화
# openCV를 활용한 방법
for i, path in enumerate(sorted(glob.glob(file_path + '/*/*.png')):
img = cv2.imread(path) # opencv로 불러들인 이미지를 numpy array에 입력
img = img.astype(np.float32)/255.0 # 이미지 정규화
x[i] = img # idx번째에 이미지 픽셀값 입력
group = path.split('/')[-2]
if group == 'normal':
label = 0 # normal을 0으로 라벨링
else:
label = 1
y[i] = label # i번째에 라벨링
위에서 첫번째 방법으로 하였다면 이번 것도 첫번째 방법으로 하면 좋을 것이고 다른 방법은 다른 방법으로 하는 것이 좋을 것이다.
- 히비스서커스 -
728x90
'Programming > Python' 카테고리의 다른 글
[Numpy] numpy로 이미지 처리하기 2 (0) | 2021.09.09 |
---|---|
[Python] 한 줄 코드 및 GPU 분산처리 코드 (0) | 2021.08.26 |
[Python] python으로 multiprocessing 해보기 (2) | 2021.06.30 |
[Numpy] 2 dimension, 3 dimension array에서 slicing하기 (2) | 2021.06.25 |
[Python] 파이썬 클래스, 모듈 (0) | 2021.01.28 |