[영상처리] 영상처리에 도움이 되는 Python Library
서론
파이썬에서 영상 처리(Image Processing)을 수행하기 위해 라이브러리들을 알아봅시다.
- Numpy, Matrix간의 연산을 파이썬에서 빠르게 수행하기 위한 라이브러리입니다.
- Matplot, 데이터를 그래프로 시각화해주는 라이브러리입니다.
- OpenCV, 영상처리 라이브러리 중 사실상 표준 라이브러리입니다.
영상 처리에서는 이 세 가지 라이브러리가 주로 사용됩니다!
이외에도 영상처리는 딥러닝과 가깝기 때문에 Tenserflow나 Pytorch또한 자주 사용됩니다!
라이브러리
Numpy
import
를 할 때 축약어로 np를 사용합니다.
1
import numpy as np
Numpy에서 배열을 생성할땐 np.array()
를 사용하고, dtype
을 명시 가능합니다.
1
2
np.array([1, 2, 3], dtype = np.uint8)
np.array([1, 2, 3])
값을 채울 때에는 앞서 설명한 np.array()
를 사용할 수도 있지만, 반복적인 연속되는 값으로 채워야 할 때는 np.arange()
와 np.linspace()
를 사용가능합니다.
np.arange()
는 시작부터 끝까지 일정 간격으로 값을 채우고,
np.linspace()
는 시작과 끝과 요소의 개수가 주어지면 개수에 맞게 간격을 조절해 값을 채우는 함수입니다.
1
2
3
# 시작과 간격을 서술하지 않으면, 시작은 0이고 간격은 1이라 가정한다.
np.arange(10) # 0 <= x < 10 까지
np.arange(10, 2) # 간격 또한 작성 가능하다, [0 2 4 6 8]
1
2
3
# 끝점을 포함할지 안할지도 작성 가능하다.
np.linspace(0, 9, 10) # [0 1 2 3 4 5 6 7 8 9]
np.linspace(0, 9, 10, false) # [0 1 2 3 4 5 6 7 8]
이번에는 특정 값으로 모든 배열을 채우는 함수입니다.
1
2
3
4
5
6
7
8
9
10
11
# 0으로 채웁니다.
np.zeros((2,2))
# 1로 채웁니다.
np.ones((2,2))
# v로 채웁니다. dtype 또한 명시 가능합니다.
np.full((2,2), v)
# 단위 행렬을 생성합니다. m과 dtype을 따로 명시 가능합니다.
np.eye(2)
배열의 차원을 변경하는 함수 np.reshape()
입니다.
1
2
# [1 2 3 4] -> [[1 2][3 4]]
np.arange(4).reshape((2,2))
두 행렬을 붙이는 함수 np.concatenate()
입니다.
1
2
3
4
5
6
7
8
a2 = np.array([[1, 2], [3, 4]])
b2 = np.array([[5, 6], [7, 8]])
# 행 기준 합치기, 아래로 추가된다.
result2 = np.concatenate((a2, b2), axis=0)
# 열 기준 합치기, 오른쪽으로 추가된다.
result3 = np.concatenate((a2, b2), axis=1)
이외에는 사칙연산을 모두 수행 가능하나..
행렬 곱에 대해서는 np.dot(a, b)
나 @
를 이용할 수 있습니다.
전치(Transpose) 행렬 또한 가능합니다. .T
나 np.transpose()
를 이용합니다.
이외에도 절댓값, 제곱근, 가우스 함수, 삼각함수, 역삼각함수 또한 지원합니다.
최솟값, 최댓값, 합연산 또한 지원합니다. (이름은 생략합니다.)
dtype
에 대해서 명시적으로, 암묵적으로 지정할 수 있으며,
np.astype()
을 통해 원하는 dtype
으로 변환 가능합니다.
Matrix내에서 어떤 조건에 부합하면 True
, 이외에는 False
로 처리하는 Boolean indexing 또한 존재합니다.
ex) a[a > 2]
배열을 어떤 조건에 따라 값을 선택하거나 변경하는 함수 np.where()
도 있습니다.
1
2
3
arr = np.array([1, 2, 3, 4, 5])
result = np.where(arr > 3, arr, -1)
# result = [-1 -1 -1 4 5]
Matplot
import
를 할 때 축약어로 plt를 사용합니다.
1
import matplotlib.pyplot as plt
다음은 그래프를 그릴 때 사용하는 함수들입니다.
1
2
3
4
5
6
7
plt.plot(x, y) # 선 그래프
plt.scatter(x, y) # 점
plt.title('hello') # 그래프 이름 지정
plt.label('x') # x축 이름 지정
plt.ylabel('y') # y축 이름 지정
plt.legend(['a', 'b', ...]) # 범례 표시
plt.show() # 그래프 출력
그외에도 히스토그램, 막대그래프, 파이 차트 , 파일(png, pdf)저장, 축 로그 스케일 등 여러가지 함수들이 존재합니다.
OpenCV
import
를 할 때 축약어는 없습니다.
1
import cv2
주로 쓰이는 함수는 다음과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 이미지를 읽습니다. flag에 따라 흑백, 컬러, 원본 그대로 읽을지를 결정합니다.
cv2.imread('file_path', flag)
# img에 따라 이미지를 생성합니다.
cv2.imwrite('file_path', img)
# 이미지를 윈도우로 표시합니다. 윈도우의 이름은 window_name 입니다.
cv2.imshow('window_name', img)
# flag에 따라 이미지의 색상을 변경합니다.
cv2.cvtColor(img, flag)
# t 밀리초만큼의 키 입력을 대기합니다.
cv2.waitKey(t)
# 모든 윈도우를 종료합니다.
cv2.destroyAllWindows()
동영상에 대한 load, save 또한 지원합니다.
1
2
3
4
5
6
7
8
# 인코딩 포맷을 설정합니다.
cv2.VideoWriter_fourcc()
# 자세하게는 이렇게 설정 가능합니다. 저장 경로, 저장 포맷, 초당 프레임수 등등..
cv2.VideoWriter(path, fourcc, fps, size, isColor)
# 영상의 윈도우 창을 보여주는 함수도 있습니다.
cv2.namedWindow(win_name, flags)
이후에도 openCV에서 .add
같은 사칙연산도 지원합니다!
Tenserflow와 Pytorch는 다른 포스트에서 자세히 다룰 예정입니다.