Python OpenCV

·2022년 7월 26일
2

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

0개의 댓글