포스트

[영상처리] 영상처리에 도움이 되는 Python Library

서론

파이썬에서 영상 처리(Image Processing)을 수행하기 위해 라이브러리들을 알아봅시다.

  1. Numpy, Matrix간의 연산을 파이썬에서 빠르게 수행하기 위한 라이브러리입니다.
  2. Matplot, 데이터를 그래프로 시각화해주는 라이브러리입니다.
  3. OpenCV, 영상처리 라이브러리 중 사실상 표준 라이브러리입니다.

영상 처리에서는 이 세 가지 라이브러리가 주로 사용됩니다!

이외에도 영상처리는 딥러닝과 가깝기 때문에 TenserflowPytorch또한 자주 사용됩니다!


라이브러리

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) 행렬 또한 가능합니다. .Tnp.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 같은 사칙연산도 지원합니다!

TenserflowPytorch는 다른 포스트에서 자세히 다룰 예정입니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.