일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Game
- 부트스트랩
- API플랫폼
- Pygame
- 계산기
- Sheety
- HTTP
- Endpoint
- 웹페이지
- SMTP
- 오류
- 파싱
- class
- 최저가
- 상태코드
- Tequila
- HTML
- Python
- ndarray
- 프로그램
- phython
- API
- 파이썬
- 웹크롤링
- 게임
- 프로젝트
- udemy
- 유데미
- twilio
- 쉬티
- Today
- Total
데이터 분석가
파이썬 np.arange를 통한 이미지 조작 본문
저번 시간에 이어 np.array, np arange 활용하여 이미지를 조작해보는
코드를 배워보겠습니다 !
다음 코드는 이번 시간에 사용할 라이브러리의 간단한 설명입니다 !
import numpy as np
import matplotlib.pyplot as plt
# np.arange
# 0부터 10까지 2씩 증가하는 배열 생성
arr = np.arange(0, 10, 2)
print(arr) # [0 2 4 6 8]
# np.flip
# 배열의 순서를 반전시킴
flipped_arr = np.flip(arr)
print(flipped_arr) # [8 6 4 2 0]
# np.nonzero
# 배열에서 0이 아닌 요소의 인덱스를 반환
indices = np.nonzero(arr)
print(indices) # (array([1, 2, 3, 4]),)
# indices 변수에는 0이 아닌 요소의 인덱스인 [1, 2, 3, 4]가 반환됨
# np.linspace
# 0부터 1까지 5개의 요소를 갖는 배열 생성
lin_space = np.linspace(0, 1, 5)
print(lin_space) # [0. 0.25 0.5 0.75 1. ]
# 랜덤 노이즈 생성
noise = np.random.random((128, 128, 3))
print(noise.shape) # (128, 128, 3)
# matplotlib을 사용하여 이미지 표시
plt.imshow(noise)
plt.show()
np.arange: 0부터 10까지 2씩 증가하는 배열을 생성
np.flip: 배열의 순서를 반전
np.nonzero: 배열에서 0이 아닌 요소의 인덱스를 반환
np.linspace: 0부터 1까지 5개의 요소를 갖는 배열을 생성
np.random.random: 128x128 크기의 3차원 배열에 랜덤한 값으로 노이즈를 생성
plt.imshow: matplotlib을 사용하여 이미지를 표시
2. 파이썬 행렬곱셈
파이썬의 행렬곱셈에서는 무려 선형 대수학의 법칙이 적용됩니다..
그게 뭐냐고여 ?
한번 봅시다 !
import numpy as np
# 행렬 A와 B 생성
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# np.dot을 사용한 행렬 곱셈
C = np.dot(A, B)
print(C)
# 결과: [[19 22]
# [43 50]]
# np.matmul을 사용한 행렬 곱셈
D = np.matmul(A, B)
print(D)
# 결과: [[19 22]
# [43 50]]
# @ 연산자를 사용한 행렬 곱셈
E = A @ B
print(E)
# 결과: [[19 22]
# [43 50]]
다음과 같이 행렬 간 곱셍에 대해서 규칙이 적용되는 것을 확인해 볼 수 있었습니다 !
저도 사실 조금 이해가 잘 안되지만 그냥 외우면 좋을거 같습니다 !
3.np.array를 통한 이미지 조작
이미지 조작 시작 전 연습으로
각각의 픽셀을 RGB(RED, GREEN, BLUE) 0~255 번까지 색상의 정도를 조절하여
랜덤 색상을 통해 색상을 돌려 이미지를 만들어 보겠습니다 !
import numpy as np
import matplotlib.pyplot as plt
# 랜덤 노이즈 생성
noise = np.random.random((128, 128, 3))
# noise 배열의 크기 출력
print(noise.shape) # (128, 128, 3)
# matplotlib을 사용하여 이미지 표시
plt.imshow(noise)
plt.show()
RGB 3색원이 정말 자기 멋대로 혼합된 결과물을 보여주네요 ! 개판이구만
이미지를 불러오기 위해
from scipy import misc
from PIL import Image
# scipy의 misc 모듈 import
# 이미지 관련 기능을 제공하는 모듈
# PIL(Python Imaging Library)의 Image 모듈 import
# 이미지 처리와 조작 라이브러리로, 이미지를 열고 저장,
# 크기 조정, 자르기, 회전, 필터 적용 등 다양한 이미지 조작 작업
해당 라이브러리를 불러오면 밑의 귀여운 너구리를 불러올 수 있습니다 !
img = misc.face() #너구리 얼굴을 가져오자
plt.imshow(img) #바로 보여주자
여기 RGB 색상을 적용하여 만든 이미지가 있습니다 !
type(img)
# img의 데이터 타입 확인
# 결과: numpy.ndarray
img.shape
# img의 크기 확인
# (768, 1024, 3) 높이, 너비, 색상 수
img.ndim
# img의 차원 확인
# 결과: 3
해당 이미지를 분석해보자면 numpy.ndarray 타입이고, 높이, 너비, 채널(색상 수, 차원)을 확인 가능합니다
grey_vals = np.array([0.2126, 0.7152, 0.0722])
# RGB to grayscale 변환에 사용할 가중치를 지정한 배열 생성
# R 채널의 가중치: 0.2126, G 채널의 가중치: 0.7152, B 채널의 가중치: 0.0722
sRGB_array = img / 255
# img 배열을 0~255 범위로 스케일링하여 sRGB_array 생성
# 이미지의 각 픽셀 값을 0~1 범위로 변환하기 위해 255로 나눔
img_gray = sRGB_array @ grey_vals
# sRGB_array와 grey_vals 간의 행렬 곱셈을 수행하여 img_gray 생성
# sRGB_array는 (세로 크기, 가로 크기, 3)의 shape을 갖는 RGB 이미지 배열
# grey_vals는 (3,)의 shape을 갖는 가중치 배열
# 행렬 곱셈을 통해 각 픽셀의 RGB 값을 grayscale 값으로 변환
img_gray = np.matmul(sRGB_array, grey_vals)
# np.matmul 함수를 사용하여 행렬 곱셈 수행 (다른 표현 방식)
plt.imshow(img_gray, cmap='gray')
# img_gray 배열을 회색조(grayscale) 이미지로 표시
# cmap='gray'를 지정하여 회색조 컬러맵을 사용하여 표시
위 코드를 이해가 조금 더 쉽게 풀어 설명하자면
1.'grey_vals': RGB 이미지를 grayscale로 변환하기 위해 사용할 가중치 지정한 배열 생성
2.'sRGB_array': 'img' 배열을 0~255 범위로 스케일링하여 sRGB_array 생성
3. 'img_gray':'sRGB_array'와 'grey_vals' 간의 행렬 곱셈을 수행하여 'img_gray' 생성
4. plt.imshow: img_gray 배열을 회색조(grayscale) 이미지로 표시
컬러풀한 너구리가 흑백 너구리가 돼 버렸네요
너구리 뿐 아니라 모든 이미지도 이처럼 조작이 가능합니다 !
이상 이미지 색상 조작을 배워보는 시간이었습니다 !
'파이썬(python) 기초' 카테고리의 다른 글
파이썬 ndarray 사용법 (0) | 2023.05.29 |
---|---|
웹 크롤링과 파싱(parsing) (0) | 2023.04.19 |
파이썬 requests 모듈로 HTTP 메소드(GET,POST,PUT 등) (0) | 2023.04.05 |
API와 END POINT(Feat.URL)의 개념 (0) | 2023.04.05 |
파이썬 클래스 활용 (0) | 2023.03.29 |