1. OpenCV란?😊
OpenCV는 Open Source Computer Vision Library의 약어로 실시간 컴퓨터 비전을 목적으로한 프로그래밍 라이브러리이다.
실시간 이미지 프로세싱에 중점을 둔 라이브러리이다. OpenCV TensorFlow, Torch/PyTorch 및 Caffe의 딥러닝 프레임워크를 지원한다.
OpenCV는 컴퓨터 비전 관련 프로그래밍을 쉽게 할 수 있도록 도와주는 라이브러리로 이미지 딥러닝(알파고 기술)에도 많이 활용된다.
2. Python OpenCV 설치
OpenCV라이브러리 사용을 위해서 명령프롬프트 창을 열고 pip명령어를 사용하여 설치한다.
pip install opencv-python
설치가 완료 되었다면 아래의 명령어를 통해 version을 확인한다.
import cv2
print(cv2.__version__)
3. OpenCV 이미지 처리
3-1 이미지 읽기
img = cv2.imread(fileName, [flag])
반환된 img의 값은 넘파이(numpy) 배열(numpy.ndarray)이다.
flags 종류
- cv2.IMREAD_UNCHANGED : 원본 사용
- cv2.IMREAD_GRAYSCALE : 1 채널, 그레이스케일 적용
- cv2.IMREAD_COLOR : 3 채널, BGR 이미지 사용
- cv2.IMREAD_ANYDEPTH : 이미지에 따라 정밀도를 16/32비트 또는 8비트로 사용
- cv2.IMREAD_ANYCOLOR : 가능한 3 채널, 색상 이미지로 사용
- cv2.IMREAD_REDUCED_GRAYSCALE_2 : 1 채널, 1/2 크기, 그레이스케일 적용
- cv2.IMREAD_REDUCED_GRAYSCALE_4 : 1 채널, 1/4 크기, 그레이스케일 적용
- cv2.IMREAD_REDUCED_GRAYSCALE_8 : 1 채널, 1/8 크기, 그레이스케일 적용
- cv2.IMREAD_REDUCED_COLOR_2 : 3 채널, 1/2 크기, BGR 이미지 사용
- cv2.IMREAD_REDUCED_COLOR_4 : 3 채널, 1/4 크기, BGR 이미지 사용
- cv2.IMREAD_REDUCED_COLOR_8 : 3 채널, 1/8 크기, BGR 이미지 사용
flag 타입을 설정하지 않은 경우, 1로 한 경우, cv2.IMREAD_COLOR를 한 경우 코드 상 표기만 다를뿐 모두 동일한 결과를 반환한다.
3-2 이미지 출력
img = cv2.imread(fileName, [flag])
cv2.imshow("Name", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imshow("Name", img)
- "Name"은 윈도우창 이름을 지정한다.
- img 는 imread() 함수로 불러온 이미지를 뜻한다.
cv2.destroyAllWindows()
cv2.waitKey()
- 사용자의 입력을 기다려주는 함수이다.
- 인자값이 없거나 0일 경우 시간 제한 없이 기다린다.
- 키를 입력받아 분기할 작업이 있을때 활용한다.
3-3 이미지 크기(width, height, channels)
img = cv2.imread(fileName, [flag])
print(img.shape)
# 출력 : (세로(height), 가로(width), 색(channels))
img.shape
- 이미지의 크기를 가지고 온다.
- 컬러 이미지의 경우 반환값은 (세로(height), 가로(width), 색(channels)) 이다.
- 흑백 이미지일 경우 (세로(height), 가로(width))를 반환한다.
3-4 이미지 색상 공간 변환(Convert Color)
✅ OpenCV에서 이미지의 색상은 RGB 순이 아니라 BGR순으로 반환한다.
✅ 색상 공간 변환 함수(cv2.cvtColor)로 이미지의 색상 공간을 변경할 수 있다.
img = cv2.imread(fileName, [flag])
img_gray = cv2.cvColor(img, cv2.COLOR_BGR2GRAY)
cv2.cvtColor(src, code, dstCn)
- src - 입력 이미지
- code - 생상 변환 코드
- cv2.COLOR_BGR2GRAY: 색을 회색으로 반전
- cv2.COLOR_BGR2HSV : 지배적인 파장의 색상을 강조하는 형태로 변형
- cv2.COLOR_BGR2RGB : BGR 순을 RGB순으로 반전
- cv2.COLOR_BGR2SAB : 밝기를 강조하고 녹생을 파랑색을 노랑색으로 반전
- dstCn - 출력채널
✅출력 채널은 출력 이미지에 필요한 채널의 수를 설정한다.
✅출력 채널은 기본값을 사용하여 자동으로 채널의 수를 결정하게 한다.
3-5 이미지 임계처리
ret,thresholded = cv2.threshold(grey,29,255,cv2.THRESH_BINARY)
#임계값을 29로 주고 29를 넘었을때 255 ,cv2.THRESH_BINARY타입으로 적용
cv2.imshow("Thresholded",thresholded)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.threshold(scr, thresh, maxval, type) - > reval, dst를 반환한다.
- scr - 입력 이미지
- thresh - 임계값
- maxval - 임계값을 넘었을때 적용할 value
- type - thresholding type
-- type 종류
- cv2.THRESH_BINARY
- cv2.THRESH_BINARY_INV
- cv2.THRESH_TRUNC
- cv2.THRESH_TOZERO
- cv2.THRESH_TOZERO_INV