이번 강의에서는
컴퓨터 비전의 기본 개념을 이해하고,
오픈 소스 라이브러리인 OpenCV(Open Source Computer Vision Library)를 활용하여 디지털 이미지 및 비디오를 처리, 분석하는 기초 지식 및 실습 기술을 습득할 예정입니다.
컴퓨터 비전 (Computer Vision) 개요
컴퓨터 비전은 컴퓨터가 디지털 이미지나 비디오로부터 의미 있는 정보를 추출하고 이해 및 해석할 수 있도록 하는 과학 및 기술 분야입니다. 목표는 인간의 시각 시스템처럼 기계가 시각 데이터를 인식, 처리하여 자율적인 의사 결정을 내릴 수 있도록 하는 것입니다.
쉽게 말해,
카메라를 통해 들어온 이미지나 영상 데이터를 컴퓨터가 사람처럼 '보고, 이해하고, 판단'하는 기술입니다.
✔️ 주요 작업
| 작업 | 설명 | 예시 |
| 이미지 분류 | 이미지에 무엇이 있는지 식별 | "고양이" 또는 "개" 식별 |
| 객체 검출 | 이미지 내 특정 객체의 위치를 사각형으로 표시 | "사람"이 이 영역에 있음 |
| 객체 추적 | 비디오에서 움직이는 객체의 경로를 따라감 | 움직이는 차량의 궤적 추적 |
| 이미지 분할 | 픽셀 단위로 객체의 경계를 정확히 구분 | 배경으로부터 사람의 실루엣 분리 |
🍀 주요 작업을 비유해 보겠습니다.
• 이미지 분류: 사진을 보고 "이건 사과야"라고 딱 정하는 것.
• 객체 검출: 사진에서 사과가 있다면 "여기 사과가 있어, 위치는 (X, Y)부터 (W, H)까지야"라고 상자에 담아 위치까지 알려주는 것.
• 객체 추적: 움직이는 공을 비디오에서 계속 따라가며 공의 움직임을 기록하는 것.
OpenCV (Open Source Computer Vision Library)
실시간 컴퓨터 비전 애플리케이션 개발을 위해 설계된
가장 널리 사용되는 오픈 소스 라이브러리.
C++로 작성되었지만 Python과의 연동성이 뛰어나며,
복잡한 알고리즘을 쉽게 사용할 수 있도록 표준화된 함수를 제공합니다.
쉽게 말해 컴퓨터 비전을 위한 만능 도구 상자라고 생각하면 됩니다.
복잡한 수학 공식이나 알고리즘을 직접 짤 필요 없이, OpenCV 함수를 호출하기만 하면 됩니다.
특히 Python에서 사용하기 매우 편리합니다.
✨ 주요 기능 및 활용 분야
• 기본 처리: 이미지 읽기/쓰기/표시, 크기 조절, 색상 공간 변환 (BGR ⇔ Gray ⇔ HSV).
• 필터링: 노이즈 제거 (블러링), 선명화, 경계선 검출 (Canny, Sobel).
• 특징점 검출 및 매칭: 코너, 엣지 등을 찾아 객체 인식 및 이미지 정렬에 활용.
• 객체 검출: Haar Cascade를 이용한 얼굴 검출, 딥러닝 기반 모델 (DNN 모듈) 활용.
• 비디오 분석: 움직임 감지, 옵티컬 플로우(Optical Flow).
👍🏻 OpenCV의 장점
• 오픈 소스: 누구나 무료로 사용 가능하며 방대한 커뮤니티 지원을 받습니다.
• 고성능 (High Performance): 핵심 기능은 C/C++로 구현되어 속도가 빠릅니다.
(Python으로 코드를 짜더라도, 실제로 연산이 이루어지는 핵심 부분은 속도가 빠른 C++로 미리 구현되어 있기 때문입니다.
덕분에 실시간 비디오 처리처럼 빠른 속도가 필요한 작업에 강합니다.)
• 광범위한 지원: Windows, Linux, macOS 등 다양한 운영체제와 프로그래밍 언어를 지원합니다.
개발 환경 설정 및 라이브러리 설치
OpenCV 실습을 위해 Anaconda를 사용하여 가상 환경을 설정하고
필요한 라이브러리를 설치하는 과정이 필요합니다.
Conda 환경 설정 및 설치
✔️ 가상환경 생성 및 활성화:
conda create --name cv_env python=3.10
conda activate cv_env
✔️ 필수 라이브러리 설치:
conda install numpy
conda install matplotlib
conda install opencv
🍀 가상 환경을 왜 쓸까요?
내 컴퓨터의 기본 Python 환경을 건드리지 않고, 특정 프로젝트(여기서는 CV_env)에 필요한 라이브러리들만 격리해서 모아두는 방입니다. 이렇게 하면 라이브러리 버전 충돌을 방지하고 환경을 깔끔하게 유지할 수 있습니다.
✨ NumPy의 중요성: OpenCV가 이미지를 다룰 때 사용하는 데이터 구조가 바로 NumPy 배열입니다.
따라서 OpenCV를 제대로 활용하려면 NumPy는 필수적으로 설치해야 합니다.
OpenCV 기본 구조 이해: 이미지 데이터와 NumPy
파이썬 환경에서 OpenCV는 이미지를 NumPy의 N-차원 배열 (ndarray) 형태로 처리합니다.
픽셀과 해상도
• 픽셀 (Pixel): 이미지를 구성하는 가장 작은 단위로, 밝기와 색상 정보를 숫자로 가집니다.
• 해상도: 이미지의 가로 픽셀 수와 세로 픽셀 수 (예: 1920×1080). 해상도가 높을수록 상세한 이미지를 표현합니다.
OpenCV 데이터 구조
| 이미지유형 | 차원 | 픽셀 값 범위 | 특징 |
| 흑백 | 2차원 (행 x 열) | 0 ~ 255 | 밝기 정보만 가짐. (0: 검은색, 255: 흰색) |
| 컬러 | 3차원 (행 x 열 x 채널) | 0 ~ 255 | 3개의 채널을 사용. OpenCV는 기본적으로 BGR 순서를 사용하며, 일반적인 RGB 순서와 다름에 주의해야 합니다. (Blue, Green, Red) |
🔍 OpenCV가 이미지를 불러오면, 그 이미지는 메모리에서 거대한 숫자 표(NumPy 배열)로 변환됩니다.
컬러 이미지라면 가로, 세로, 그리고 B, G, R 세 개의 층(채널)을 가진 3차원 표가 되는 것입니다.
모든 이미지 처리는 이 숫자 배열을 조작하는 것입니다.
⚠️ BGR 순서 유의!
일반적인 그래픽 프로그램은 RGB (빨강, 초록, 파랑) 순서지만, OpenCV는 BGR (파랑, 초록, 빨강) 순서를 사용합니다.
따라서 색상 정보를 다룰 때 이 순서를 혼동하지 않도록 주의해야 합니다.
기본 이미지 입출력 함수 (I/O)
OpenCV를 사용한 기본 이미지 처리의 핵심 함수들입니다.
| 기능 | 함수 | 설명 |
| 읽기 | cv2.imread(filepath, flag) | 이미지 파일을 불러와 NumPy 배열로 반환. flag로 흑백/컬러 지정 가능. |
| 표시 | cv2.imshow(winname, mat) | 이미지를 팝업 창에 표시. |
| 저장 | cv2.imwrite(filepath, mat) | NumPy 배열 형태의 이미지를 파일로 저장. |
| 대기 | cv2.waitKey(delay) | 키 입력을 대기. delay가 0이면 무한 대기. |
| 창 닫기 | cv2.destroyAllWindows() | 생성된 모든 이미지 창을 닫음. |
☀️ 이미지 출력 과정 (예시: basic.py)
• cv2.imread(): 하드 디스크에 있는 이미지 파일을 메모리(NumPy 배열)로 가져옵니다.
• cv2.imshow(): 메모리에 있는 배열을 화면에 팝업 창으로 띄웁니다.
• cv2.waitKey(0): 창이 즉시 닫히지 않고, 사용자가 키를 누를 때까지 무한정 기다리게 합니다. 이 함수가 없으면 이미지를 보자마자 프로그램이 종료됩니다.
• cv2.destroyAllWindows(): 사용자가 키를 누르면 모든 창을 깨끗하게 닫습니다.
'[오즈코딩스쿨] AI 헬스케어 > 🖼️ 의료이미지 CV' 카테고리의 다른 글
| [OpenCV] 주요 함수 및 클래스 정리 (1) | 2025.12.11 |
|---|