OpenCV의 소개 및 기본 사용법
- 영상 처리와 컴퓨터 비전을 위한 오픈소스 라이브러리
- C, C++, Python 등에서 사용 가능하다.
- cv2.imread(file_name, flag) 함수 → 이미지를 읽어 Numpy 객체로 만드는 함수
- file_name : 읽고자 하는 이미지 파일
- flag : 이미지를 읽는 방법 설정
- IMREAD_COLOR : 이미지를 Color로 읽고, 투명한 부분은 무시
- IMREAD_GRAYSCALE : 이미지를 Grayscale로 읽기
- IMREAD_UNCHANGED : 이미지를 Color로 읽고, 투명한 부분도 읽기(Alpha)
- 반환 값 : Numpy 객체 (행, 열, 색상 : 기본 BGR)
- cv2.imshow(title, image) 함수 → 특정한 이미지를 화면에 출력합니다.
- title : 윈도우 창의 제목
- image : 출력할 이미지 객체
- cv2.imwrite(file.name, image) 함수 →특정한 이미지를 파일로 저장하는 함수
- file_name : 저장할 이미지 파일 이름
- image : 저장할 이미지 객체
- cv2.waitKey(time) 함수 → 키보드 입력을 처리하는 함수
- time : 입력 대기시간 (무한대기 : 0)
- 반환 값 : 사용자가 입력한 Ascii Code(ESC : 27)
- cv2.destroyAllWindows() 함수 → 화면의 모든 윈도우를 닫는 함수
import cv2
img_basic = cv2.imread('file_name.jpg', cv2.IMREAD_COLOR) # 이미지 읽어오는 함수
cv2.imshow('Image Basic', img_basic) # 이미지 보여주는 함수
cv2.waitKey(0) # 키보드 입력을 처리하는 함수
cv2.imwrite('result1.png', img_basic) # 특정 이미지파일로 저장 함수
cv2.destroyAllWindows()
img_gray = cv2.cvtColor(img_basic, cv2.COLOR_BGR2GRAY) # cvtColor를 통해 COLOR 에서 GRAY로 변경
cv2.imshow('Image Gray', img_gray) # 이미지 보여주는 함수
cv2.waitKey(0) # 키보드 입력을 처리하는 함수
cv2.imwrite('result2.png', img_gray) # 특정 이미지파일로 저장 함수
OpenCV 이미지 연산
- 이미지 크기 및 픽셀 확인
import cv2
image = cv2.imread('image_basic.png')
# 픽셀 수 및 이미지 크기 확인
print(image.shape)
print(omage.size)
# 이미지 Numpmy 객체의 특정 픽셀을 가리킵니다.
px = image[100, 100]
# B, G, R 순서로 출력됩니다.
# Gray Scale : B, G, R로 구분되지 않습니다.
print(px)
# R 값만 출력하기
print(px[2])
- 특정 범위 픽셀 변경
- ROI 추출 및 복사
- 픽셀별로 색상 다루기
OpenCV 이미지 변형
-
이미지 크기 조절
- 보간법(Interpolation) →사이즈가 변할 때 픽셀 사이즈의 값을 조절하는 방법을 의미
- cv2.resize(image, dsize, fx, fy, interpolation) 함수 → 이미지의 크기를 조절합니다
- dsize : Manual Size
- fx : 가로 비율
- fy : 세로 비율
- Interpolation : 보간법
- INTER_CUBIC : 사이즈를 크게 할 때 주로 사용
- INTER_AREA : 사이즈를 작게 할 때 주로 사용
-
이미지의 위치 변경
- cv2. wrapAffine(image, M, dsize) 함수 → 이미지의 위치를 변경한다.
- M : 변환 행렬
- dsize : Manual Size
- cv2. wrapAffine(image, M, dsize) 함수 → 이미지의 위치를 변경한다.
-
이미지의 회전
- cv2.getRotationMatrix2D(center, angle, scale) 함수 → 이미지의 회전을 위한 반환 행렬을 생성한다.
- center : 회전 중심
- angle : 회전 각도
- scale : Scale Factor
- cv2.getRotationMatrix2D(center, angle, scale) 함수 → 이미지의 회전을 위한 반환 행렬을 생성한다.
OpenCV 이미지 합치기
- cv2.add() 함수 → Saturation 연산을 수행한다. 0보다 작으면 0, 255보다 크면 255로 표현 (일종의 clip)
- np.add() 함수 → Modulo 연산을 수행한다. 256은 0, 257은 1로 표현
OpenCV 임계점 처리하기
- 이미지의 기본 이진화
- cv2.threshold(image, thresh, max_value, type) 함수 → 임계값을 기준으로 흑/백으로 분료하는 함수
- image : 처리할 Gray Scale 이미지
- thresh : 임계 값 (전체 픽셀에 적용), 한계치
- max_value : 임계 값을 넘었을 때 적용할 값
- type : 임계점을 처리하는 방식
- THRESH_BINARY : 임계 값보다 크면 max_value, 작으면 0
- THRESH_BINARY_INV : 임계 값보다 작으면 max_value, 크면 0
- THRESH_TRUNC : 임계 값보다 크면 임계값, 작으면 그대로
- THRESH_TOZERO : 임계 값보다 크면 그대로, 작으면 0
- THRESH_TOZERO_INV : 임계 값보다 크면 0, 작으면 그대로
- cv2.threshold(image, thresh, max_value, type) 함수 → 임계값을 기준으로 흑/백으로 분료하는 함수
- 이미지의 적응 임계점 처리
- 하나의 이미지에 다수의 조명 상태가 존재하는 경우 적용하면 좋다.
- cv2.adaptiveThreshold(image, max_value, adaptive_method, type, block_size, C) 함수 → 적응 임계점 처리 함수
- max_value : 임계 값을 넘었을 때 적용할 값
- adaptive_method : 임계 값을 결정하는 계산 방법
- ADAPTIVE_THRESH_MEAN_C : 주변영역의 평균값으로 결정
- ADAPTIVE_THRESH_GAUSSIAN_C
- type : 임계점을 처리하는 방식
- block_size : 임계 값을 적용할 영역의 크기
- C : 평균이나 가중 평균에서 차감할 값
- Adaptive Threshold를 이용하면, 전체 픽셀을 기준으로 임계 값을 적용하지 않습니다
OpenCV Tracker
-
cv2.createTrackbar(track_bar_name, window_name, value, count, on_change) 함수 → Track를 생성하는 함수
- value : 초기 값
- count : Max 값( Min : 0)
- on_change : 값이 변경될 때 호출되는 Callback 함수
import cv2
import numpy as np
def change_color(x):
r = cv2.getTrackbarPos("R", "Image")
g = cv2.getTrackbarPos("G", "Image")
b = cv2.getTrackbarPos("B", "Image")
image[:] = [b, g, r]
cv2.imshow("Image", image)
image = np.zeros((600, 400, 3), np.uint8)
cv2.namedWindow("Image")
cv2.createTrackbar("R", "Image", 0, 255, change_color)
cv2.createTrackbar("G", "Image", 0, 255, change_color)
cv2.createTrackbar("B", "Image", 0, 255, change_color)
cv2.imshow("Image", image)
cv2.waitKey(0)
OpenCV 도형 그리기
- 직선 그리기
- cv2.line(image, start, end, color, thickness) 함수 → 하나의 직선을 그리는 함수
- start : 시작 좌표 (2차원)
- end : 종료 좌표 (2차원)
- thickness : 선의 두께
- cv2.line(image, start, end, color, thickness) 함수 → 하나의 직선을 그리는 함수
- 사각형 그리기
- cv2.rectangle(image, start, end, color, thickness) 함수 → 하나의 사각형을 그리는 함수
- start : 시작 좌표 (2차원)
- end : 종료 좌표 (2차원)
- thickness : 선의 두께 (채우기 :-1)
- cv2.rectangle(image, start, end, color, thickness) 함수 → 하나의 사각형을 그리는 함수
- 원 그리기
- cv2.cricle(image, center, radian, color, thickness) 함수 → 하나의 원을 그리는 함수
- center : 원의 중심 (2차원)
- radian : 반지름
- thickness : 선의 두께 (채우기 :-1)
- cv2.cricle(image, center, radian, color, thickness) 함수 → 하나의 원을 그리는 함수
- 다각형 그리기
- cv2.polylines(image, points, is_closed, color, thickness) 함수 → 하나의 다각형을 그리는 함수
- point : 꼭지점들
- is_closed : 닫힌 도형 여부
- thickness : 선의 두께 (채우기 :-1)
- cv2.polylines(image, points, is_closed, color, thickness) 함수 → 하나의 다각형을 그리는 함수
- 텍스트 그리기
- cv2.putText(image, text, position, font_type, font_scale, color) 함수 → 하나의 텍스트를 그리는 함수
- position : 텍스트가 출력될 위치
- font_type : 글씨체
- font_scale : 글씨 크기 가중치
- cv2.putText(image, text, position, font_type, font_scale, color) 함수 → 하나의 텍스트를 그리는 함수
OpenCV Contours
-
Contours 찾기
-
cv2.findContours(image, mode, method) 함수 → 이미지에서 Contour들을 찾는 함수
-
mode : Contour들을 찾는 방법
-
RETR_EXTERNAL : 바깥쪽 Line 만 찾기
-
RETR_LIST : 모든 Line을 찾지만, Hierarchy 구성 X
-
RETR_TREE : 모든 Line 을 찾으며, 모든 Hierarchy 구성 O
-
method : Contour들을 찾는 근사치 방법
-
CHAIN_APPROX_NONE : 모든 Contour 포인트 저장
-
CHAIN_APPROX_SIMPLE : Contour Line을 그릴 수 있는 포인트만 저장
※ 입력 이미지는 Gray Scale Threshold 전처리 과정이 필요합니다
-
-
Contours 그리기
-
cv2.drawContours(image, contours, contour_index, color, thickness) 함수 → Contour들을 그리는 함수
- contour_index : 그리고자 하는 Contours Line (전체 : -1)
OpenCV Contours 처리
-
Contour의 사각형 외각 찾기
-
cv2.boundingRect(contour) 함수 → Contour를 포함하는 사각형을 그립니다.
- 사각형의 X, Y 좌표와 너비, 높이를 반환합니다.
-
Contour의 Convex Hull
- cv2.convexHull(contour) 함수 → Convex Hull 알고리즘으로 외곽을 구성하는 함수
- 대략적인 형태의 Contour 외곽을 빠르게 구할 수 있습니다. (단일 Contour 반환)
- cv2.convexHull(contour) 함수 → Convex Hull 알고리즘으로 외곽을 구성하는 함수
-
Contour의 유사 다각형 구하기
-
cv2.approxPolyDP(curve, epsilon, cosed) 함수 → 근사치 Contour를 구합니다.
- curve : Contour
- epsilon : 최대 거리 (클수록 Point 개수 감소)
- closed : 폐곡선 여부
-
Contour의 기본 정보
- cv2.contourArea(contour) 함수 → Contour의 면적을 구합니다
- cv2.arcLength(contour) 함수 → Contour의 둘레를 구합니다.
- cv3.moments(contour) 함수 → Contour의 특징을 추출합니다.
OpenCV Filtering
-
필터링
- 이미지에 커널을 적용하여 이미지를 흐리게(Blurring = Smoothing) 처리 할 수 있습니다.
- 이미지를 흐리게 만들면 노이즈 및 손상을 줄일 수 있습니다.
-
컨볼루션 계산
- 특정한 이미지에서 커널(Kernel)을 적용해 컨볼루션 계산하여 필터링을 수행할 수 있습니다.
'Python_파이썬' 카테고리의 다른 글
Python 파이썬 기초공부 : tkinter란 ?! 총 정리 완벽 요약 정리 ! (0) | 2020.08.29 |
---|---|
파이썬 Python 기초공부 : 데이터 시각화 하기 Matplotlib에 대해 알아보자 ! (0) | 2020.08.28 |
파이썬 데이터 분석 및 이미지 처리(1) : Numpy란 ? Numpy 총정리 (0) | 2020.08.26 |
Python 파이썬 기초 공부, 모듈 (0) | 2020.08.22 |
Python 파이썬 기초 공부, 함수란 ?! 파이썬 함수 알아보기 초간단 정리 (0) | 2020.08.22 |