Numpy 및 Image Basics

박광욱·2023년 1월 14일
0

Computer Vision

목록 보기
1/8

📕 Numpy

  • NumPy는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리할 수 있도록 지원하는 파이썬의 라이브러리이다.
  • NumPy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공한다.

📗 Numpy에서 자주 사용되는 함수

import

import numpy as np

numpy를 불러 오겠다는 의미이고 as의 의미는 앞으로 numpy를 줄여 np로도 사용이 가능하다는 것이다.


np.array

list = [1, 2, 3]
array = np.array(list)

List타입의 변수를 np.array의 형태로 바꾸어준다.


arange

# arange함수는 첫 번째 인자부터 두 번째 인자 전까지
# 세 번째 인자 만큼의 간격만큼 범위안의 값들을 넣는다.
# np.arange함수는 정수를 넣는다.
np.arange(0, 10, 2)

💻 결과

array([0, 2, 4, 6, 8])

0부터 10까지 간격이 2만큼 값이 증가하며 배열에 저장된다.
여기서 arange함수의 두 번째 인자인 10은 포함이 되는 것이 아니고 전까지이다.


zeros

# np.zeros함수는 실수를 넣는다.
# shape는 모양을 나타낸다(10개의 행, 5개의 열)
np.zeros(shape=(10, 5))

💻 결과

array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])

np.zeros함수는 모양을 입력하면 해당하는 행과 열의 크기만큼 배열이 만들어지고 값은 모두 0으로 만들어진다.
이렇게 만들어진 배열은 모두 실수형 타입이다.


ones

# shape는 안써도 됨
np.ones((2,4))

💻 결과

array([[1., 1., 1., 1.],
       [1., 1., 1., 1.]])

np.zeros와 비슷한 함수인데 이 함수는 값을 모두 1로 만들어준다.


Min & Max & Mean

list = [95, 11, 81, 70, 63, 87, 75,  9, 77, 40]
array = np.array(list)
array.max()		# 95
array.argmax()	# 0
array.min()		# 9
array.argmin()	# 7
array.mean()	# 60.8

💻 결과

95
0
9
7
60.8

max함수를 사용하게 되면 가장 큰 값을 리턴해준다. argmax함수는 가장 큰 값의 인덱스 번호를 리턴해준다.
min과 argmin의 함수는 max함수와 비슷하게 가장 작은 값, 그에 해당하는 인덱스를 리턴해준다.
평균을 구하고 싶다면 mean함수를 사용하면 된다.


인덱싱 및 슬라이스

array = np.arange(0,100).reshape(10, 10)
'''
array([[ 0,  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, 32, 33, 34, 35, 36, 37, 38, 39],
       [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
       [50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
       [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
       [70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
       [80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
       [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])
'''
array[:, 1]
array[:, 1].reshape(10, 1)
array[0:3, 0:5]

💻 결과

array([ 1, 11, 21, 31, 41, 51, 61, 71, 81, 91])
array([[ 1],
       [11],
       [21],
       [31],
       [41],
       [51],
       [61],
       [71],
       [81],
       [91]])
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [20, 21, 22, 23, 24]])

mat[ : , 1]의 의미는 모든 행 그리고 1번째 열을 가져오는 것이다.
reshape함수는 배열의 모양을 바꾸어 주는데, 총 크기가 변하면 안된다. 위의 mat[ : , 1]의 크기는 10이어서 (1, 10), (2, 5)등의 크기로만 바꿀수 있다.


📘 이미지 불러오기

import

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image 	# 이미지를 열수 있게 해주는 이미지 기능 (JPEG, PNG)
                      	# 이 이미지를 numpy가 이해할 수 있는 배열로 바꿀 수 있다.

이미지 불러오는 법

pic = Image.open('YOUR IMAGE DIRECTION')
type(pic)

💻 결과


PIL.JpegImagePlugin.JpegImageFile

위의 파일은 JPEG이미지이므로 이 파일은 numpy가 다룰 수 없다.


numpy가 다룰 수 있게 변환

pic_arr = np.asarray(pic)
type(pic_arr)

💻 결과

numpy.ndarray

위의 코드를 이용하면 numpy의 배열로 바꾸어 준다.


numpy배열을 이미지로 나타내기

# 이 배열을 하나의 이미지로 나타낼 수 있게 해준다.
# plt.imshow의 함수는 배열로 바뀐 이미지들을 보여주기 위해 특수 기능이다.
plt.imshow(pic_arr)

💻 결과


이미지를 흑백으로 변환

# 흑백 화면으로 출력
# 흰색에 가까울수록 해당하는 색이 많이 쓰였다
# 귀 부분을 보면 다른 사진에 비해 조금 더 하얀데
# 위의 풀 컬러의 사진을 보면 진짜 귀가 붉은 색을 띈다.
pic_red = pic_arr.copy()
plt.imshow(pic_red[:, :, 0], cmap='gray')

💻 결과

위의 copy함수는 해당 배열을 복사하는 함수이다.
pic_red[ : , : , 0]는 빨간 채널을 가져온다.
cmap='gray'를 입력해야지 흑백으로 사진이 나온다.


출처 : OpenCV 및 딥러닝 을 이용한 Computer Vision 파이썬

profile
Vancouver

0개의 댓글