OpenCV 개요

Seungpil Choi·2022년 7월 17일
0

OpenCV 개요

OpenCV란?

  • OpenCV 라이브러리를 사용하면 다음과 같은 작업을 쉽게 할 수 있다.
    • 영상 파일의 읽기 및 쓰기
    • 비디오 캡처 및 저장
    • 영상 처리(필터, 변환)
    • 영상이나 비디오에서 얼굴, 눈, 자동차와 같은 특정 물체를 감지
    • 비디오를 분석하여 움직임을 추정하고, 배경을 없애고, 특정 물체를 추적할 수 있다.
    • 기계 학습 알고리즘을 사용하여 물체를 인식할 수 있다.

"왜 컴퓨터 비전 라이브러리를 영상 처리에 사용하는가?"

  • OpenCV는 영상 처리 라이브러리가 아니고 컴퓨터 비전 라이브러리이다. 이는 컴퓨터 비전 분야가 영상 처리를 포함하고 있기 때문이다. 영상 처리는 영상의 조자에 중점을 두지만 컴퓨터 비전은 영상에서 물체를 인식하는 것을 최종 목표로 한다. 일반적으로 영상에서 물체를 인식하기 위해서는 영상 처리 과정을 거쳐야 하는 경우가 많다. 따라서 OpenCV도 영상 처리에 필요한 거의 대부분의 함수를 포함하고 있다.

OpenCV 라이브러리 모듈

  • Core
    • Scalar, Point, Range 등과 같은 기본 데이터 구조를 가지고 있다. 영상을 저장하는데 사용되는 다차원 행렬 Mat도 여기에 포함되어있다.
  • Image Processing
    • 영상 필터링, 기하학적 영상 변환, 색 공간 변환, 히스토그램 등과 같은 다양한 영상 처리 작업을 포함.
  • Video
    • 움직임 추정, 배경 삭제 및 객체 추적과 같은 비디오 분석 기능을 다루고 있다.
  • Video I/O
    • 비디오 캡처 및 비디오 코덱 기능을 가지고 있다.
  • calib3D
    • 다중 뷰 지오메트리 알고리즘, 단일 및 스테레오 카메라 보정, 물체 자세 추정, 스테레오 비전을 이용한 3D구조 복원 등의 알고리즘이 포함되어 있다.
  • features2D
    • 이 모듈에는 특징 인식과 특징을 기술하는 기능이 포함되어 있다.
  • Objdetect
    • 이 모듈에는 얼굴, 눈, 머그잔, 사람, 자동차 등과 같은 사전에 정의된 물체를 탐지하는 코드가 탑재되어 있다.
  • Highgui
    • 간단한 그래픽 사용자 인터페이스 기능을 제공하는 모듈이다.
  • gpu
    • GPU(그래픽CPU)를 사용할 수 있는 클래스와 함수들이 들어 있다.

OpenCV 설치 및 사용

  • OpenCV 설치 및 import dependency

    pip install opencv-python
    import cv2

영상 파일 읽고 쓰기

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('lena.png')
plt.imshow(image)

cv2.imread() 의 두번째 인수

  • IMREAD_UNCHANGED (<0) 영상을 그대로 적재한다.
  • IMREAD_GRAYSCALE (=0) 영상을 그레이스케일 영상으로 적재한다.
  • IMREAD_COLOR(>0) 컬러 영상을 RGB형식으로 적재한다.

간단한 영상 처리

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('lena.png')
plt.imshow(image)

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
plt.imshow(gray_image, cmap='gray')

cv2.imwrite("gray_lena.png", gray_image)


cv2.flip(src, flag)함수

  • flag = 0 상하 반전
flip_image = cv2.flip(image, 0)
plt.imshow(flip_image)

  • flag = 1 좌우 반전
flip_image = cv2.flip(image, 1)
plt.imshow(flip_image)

  • flag = -1 상하 좌우 반전
flip_image = cv2.flip(image, -1)
plt.imshow(flip_image)

도형 그리기

  • line(img, pt1, pt2, color, thickness, lineType, shift) : 직선을 그리는 함수
  • ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType) : 타원을 그리는 함수
  • rectangle(img, pt1, pt2, color, thickness, lineType, shift) : 사각형을 그리는 함수
  • circle(img, center, radius, color, thickness, lineType, shift) : 원을 그리는 함수
  • fillPoly() : 채워진 다각형을 그리는 함수
  • 등등
import cv2
import matplotlib.pyplot as plt
import numpy as np

# 흑백 이미지생성
blank_img = np.zeros((400,600,3), dtype=np.int16)

line = cv2.line(blank_img, (100,100), (300,300), (0, 0, 255), 7)
rectangle = cv2.rectangle(blank_img, (250, 30), (450, 200), (0, 255, 0), 7)
circle = cv2.circle(blank_img, (100, 300), 60, (255,0,0), 3)
ellipse = cv2.ellipse(blank_img, (300,350), (100, 60), 45, 130, 270, (255,255,255), 5)

vertices = np.array([[100,300],[200,200],[400,300],[200,400]], dtype=np.int32)
pts = vertices.reshape((-1,1,2))
cv2.polylines(blank_img, [pts], isClosed=True, color=(127,127,127), thickness=5)

plt.imshow(blank_img)

키보드 및 마우스 이벤트 처리

트랙바의 사용

비디오 처리

0개의 댓글