컴퓨터비젼
OpenCV란?
by 3in9u
2025. 4. 4.
💡 개요
- Open Source Computer Vision Library (OpenCV)
- 컴퓨터 비전과 이미지/영상 처리를 위한 오픈소스 라이브러리
- 다양한 프로그래밍 언어 지원: Python, C++, Java 등
- 실시간 영상 처리 및 객체 인식, 머신러닝/딥러닝 연계 가능
예: 얼굴 인식, 번호판 인식, 동작 감지, 배경 제거, 도형 인식 등 다양한 프로젝트에 사용됨
🔧 OpenCV의 주요 기능
🖼️ 1. 이미지 처리
기능설명함수 예시
| 이미지 읽기 |
이미지 파일을 불러오기 |
cv2.imread('img.jpg') |
| 이미지 저장 |
이미지 파일로 저장 |
cv2.imwrite('save.jpg', img) |
| 색상 변환 |
BGR ↔ GRAY / HSV / LAB 등 |
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
| 필터링 |
블러링, 노이즈 제거 |
cv2.GaussianBlur(), cv2.medianBlur() |
| 히스토그램 분석 |
밝기 분포 확인 |
cv2.calcHist() |
🎞️ 2. 영상 처리
기능설명함수 예시
| 영상 불러오기 |
프레임 단위로 처리 |
cv2.VideoCapture(0) |
| 모션 감지 |
프레임 간 차이 계산 |
프레임 간 차분 + 이진화 |
| 엣지 검출 |
윤곽선 검출 |
cv2.Canny(img, 100, 200) |
영상은 여러 개의 이미지를 빠르게 연속으로 보여주는 것 → 이미지 처리 기법 대부분을 그대로 적용 가능!
🧍 3. 객체 검출
기능설명함수 예시
| 얼굴/눈 검출 |
Haar Cascade 기반 |
cv2.CascadeClassifier() |
| 딥러닝 연동 |
사전 학습된 YOLO, MobileNet 등 |
cv2.dnn.readNetFrom...() |
| 객체 경계 상자 출력 |
검출 결과를 직사각형으로 시각화 |
cv2.rectangle() |
OpenCV는 자체 검출기 외에도 YOLO나 TensorFlow 모델과의 연동도 지원합니다.
📐 4. 영상 변환 및 기하학 연산
기능설명함수 예시
| 크기 변경 |
확대/축소 |
cv2.resize(img, (w, h)) |
| 회전 |
90도, 180도 등 |
cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) |
| 기하 변형 |
이동, 확대, 투시 왜곡 등 |
cv2.warpAffine(), cv2.warpPerspective() |
🎨 5. 색 공간 변환 (Color Space)
이미지는 보통 BGR(Blue, Green, Red) 형식으로 저장됩니다.
→ 다양한 작업을 위해 다른 색 공간으로 변환해야 할 때가 많습니다.
변환 대상설명코드 예시
| GRAY |
흑백 이미지 |
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
| HSV |
색상(Hue), 채도(Saturation), 명도(Value) |
cv2.cvtColor(img, cv2.COLOR_BGR2HSV) |
| LAB |
밝기 및 색상 분리 |
cv2.cvtColor(img, cv2.COLOR_BGR2LAB) |
예: HSV는 색상 필터링, GRAY는 엣지 검출, LAB는 밝기 보정에 주로 사용됩니다.
✨ 간단 예제 코드 (Python)
import cv2
# 이미지 읽기
img = cv2.imread('image.jpg')
# 색 공간 변환
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 엣지 검출
edges = cv2.Canny(gray, 100, 200)
# 이미지 보여주기
cv2.imshow('Gray Image', gray)
cv2.imshow('Edge Detection', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()