OpenCV 기초
1. OpenCV 개요
- OpenCV (Open Source Computer Vision Library)
- 컴퓨터 비전 및 머신러닝 애플리케이션 개발을 위한 오픈소스 라이브러리
- 다양한 프로그래밍 언어(C++, Python, Java 등) 지원
- 실시간 영상 처리에 강력한 기능 제공
- 컴퓨터 비전(Computer Vision)
- 컴퓨터가 사람의 눈처럼 이미지나 비디오를 ‘보고’ 이해하도록 만드는 AI 분야
- 자율주행 및 모빌리티 AI에서의 OpenCV
- 핵심 역할
- 자율주행차의 ‘눈’인 카메라 센서에서 들어오는 영상 데이터를 처리하고 분석하는 데 필수
- 주요 활용 예시
- 객체 인식: 도로 위의 차량, 보행자, 자전거 등을 탐지, 분류
- 차선 인식: 차량이 주행할 차선의 식별 및 추적
- 신호등 및 표지판 인식: 교통 신호와 도로 표지판의 종류를 판독하여 차량의 행동 결정
- 거리 측정: 스테레오 비전이나 단안 카메라 기반의 기술로 객체까지의 거리 추정
- 환경 인지: 악천후(비, 눈, 안개) 환경에서의 영상 품질 개선 및 주변 환경 정보 추출
- 핵심 역할
2. OpenCV 개발 환경 설정
- 기능 실습 시: PC / CoLab에서 실행
- PC: 직접 패키지들을 설치해야 함
- CoLab: 기본적으로 설치되어 있음 ➜ 직접 설치할 필요 없음
- 구현 실습 시: Raspberry Pi에서 실행 ➜ 직접 패키지들을 설치해야 함 + 리눅스 기반
#// file: "Terminal: bash"
# 1. 시스템 업데이트
sudo apt update
sudo apt upgrade
# 2. OpenCV 설치에 필요한 패키지 설치
sudo apt install build-essential cmake pkg-config
sudo apt install libjpeg-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt install libgtk-3-dev libatlas-base-dev gfortran
sudo apt install python3-dev python3-pip
# 3. OpenCV 파이썬 라이브러리 설치
# (시간이 꽤 소요될 수 있음)
pip3 install opencv-python numpy matplotlib
- 확인: 설치 후 Python에서
import cv2가 성공하면 됨
3. OpenCV를 이용한 이미지 기본 작업
3.1 이미지 불러오기
- 지정된 경로의 이미지를 NumPy 배열 형태로 메모리에 로드
- 사용함수:
cv2.imread()- 경로
- 이미지 파일의 정확한 경로를 지정
- 예:
images/my_car.jpg
- Flags
cv2.IMREAD_COLOR(기본값, 컬러로 로드)cv2.IMREAD_GRAYSCALE(그레이스케일로 로드) 등
- 경로
- 사용함수:
#// file: "image_process.py"
import cv2
# 이미지 불러오기 (OpenCV는 BGR 순서)
# (이미지 파일 경로는 각자의 환경에 맞게)
image_path = 'images/traffic_light.jpg'
img_color = cv2.imread(image_path, cv2.IMREAD_COLOR)
# 이미지가 제대로 로드되었는지 확인
if img_color is not None:
print("이미지 불러오기 성공!")
print(f"이미지 형태 (높이, 너비, 채널): {img_color.shape}") # 예: (480, 640, 3)
print(f"이미지 데이터 타입: {img_color.dtype}") # 예: uint8
else:
print(f"오류: {image_path} 파일을 찾을 수 없거나 불러올 수 없습니다.")
3.2 이미지 표시하기
- 새로운 창에 이미지 표시
- 사용함수:
cv2.imshow()cv2.waitKey(): 키 입력을 기다리는 함수- 0: 무한정 대기
- 특정 시간(밀리초): 해당 시간 동안 대기
cv2.destroyAllWindows(): 생성된 모든 OpenCV 창을 닫음
- 사용함수:
#// file: "image_process.py"
if img_color is not None:
cv2.imshow('Traffic Light Image', img_color) # 'Traffic Light Image'는 창 이름
cv2.waitKey(0) # 키 입력이 있을 때까지 무한정 대기
cv2.destroyAllWindows() # 모든 창 닫기
3.3 이미지 저장하기
- 처리된 이미지를 파일로 저장
- 사용함수:
cv2.imwrite()- 확장자: 이미지 형식(png, jpg, bmp 등)은 확장자에 따라 자동으로 결정됨
- 사용함수:
#// file: "image_process.py"
# 그레이스케일 이미지로 변환 후 저장하는 예시
if img_color is not None:
img_gray = cv2.cvtColor(img_color, cv2.COLOR_BGR2GRAY)
cv2.imshow('Traffic Light Image', img_gray) # 변환된 이미지 확인용으로 표시해보기
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('images/traffic_light_gray.jpg', img_gray)
print("그레이스케일 이미지 저장 완료!")
3.4 이미지 속성 확인
.shape: 이미지의 형태 (높이, 너비, 채널 수).size: 전체 픽셀 수 (높이 * 너비 * 채널 수).dtype: 이미지 픽셀 데이터 타입 (일반적으로uint8)
if img_color is not None:
print(f"이미지 형태 (높이, 너비, 채널): {img_color.shape}")
print(f"전체 픽셀 수: {img_color.size}")
print(f"데이터 타입: {img_color.dtype}")