컴퓨터 비전은 디지털 이미지를 통해 컴퓨터가 고수준의 이해를 할 수 있도록 하는 학문입니다. 이 정의는 매우 광범위한데, 이해라는 것이 사진에서 객체를 찾는 것(객체 탐지), 무슨 일이 일어나고 있는지 파악하는 것(이벤트 탐지), 사진을 텍스트로 설명하는 것, 또는 3D로 장면을 재구성하는 것 등 다양한 의미를 가질 수 있기 때문입니다. 사람의 이미지를 다루는 특별한 작업도 있습니다. 예를 들어, 나이와 감정 추정, 얼굴 탐지 및 식별, 3D 자세 추정 등이 있습니다.
컴퓨터 비전의 가장 간단한 작업 중 하나는 이미지 분류입니다.
컴퓨터 비전은 종종 AI의 한 분야로 간주됩니다. 오늘날 대부분의 컴퓨터 비전 작업은 신경망을 사용하여 해결됩니다. 이 섹션에서는 컴퓨터 비전에 사용되는 특별한 유형의 신경망인 합성곱 신경망에 대해 더 배울 것입니다.
하지만 이미지를 신경망에 전달하기 전에, 많은 경우 알고리즘 기법을 사용하여 이미지를 개선하는 것이 합리적입니다.
이미지 처리를 위한 여러 Python 라이브러리가 있습니다:
- imageio: 다양한 이미지 형식을 읽고/쓰는 데 사용할 수 있습니다. 또한 비디오 프레임을 이미지로 변환하는 데 유용한 ffmpeg를 지원합니다.
- Pillow: PIL로도 알려져 있으며, 이미지 변형, 팔레트 조정 등 몇 가지 이미지 조작을 지원하는 더 강력한 라이브러리입니다.
- OpenCV: C++로 작성된 강력한 이미지 처리 라이브러리로, 이미지 처리의 사실상 표준이 되었습니다. Python 인터페이스도 제공합니다.
- dlib: 여러 머신러닝 알고리즘을 구현한 C++ 라이브러리로, 일부 컴퓨터 비전 알고리즘도 포함되어 있습니다. Python 인터페이스를 제공하며, 얼굴 및 얼굴 랜드마크 탐지와 같은 어려운 작업에 사용할 수 있습니다.
OpenCV는 이미지 처리의 사실상 표준으로 간주됩니다. C++로 구현된 많은 유용한 알고리즘을 포함하고 있습니다. Python에서도 OpenCV를 호출할 수 있습니다.
OpenCV를 배우기에 좋은 자료는 이 Learn OpenCV 강좌입니다. 이 커리큘럼에서는 OpenCV를 배우는 것이 목표가 아니라, OpenCV를 사용할 수 있는 예제와 방법을 보여주는 것이 목표입니다.
Python에서 이미지는 NumPy 배열로 편리하게 표현할 수 있습니다. 예를 들어, 320x200 픽셀 크기의 그레이스케일 이미지는 200x320 배열에 저장되며, 동일한 크기의 컬러 이미지는 200x320x3 형태(3개의 색상 채널)로 저장됩니다. 이미지를 로드하려면 다음 코드를 사용할 수 있습니다:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)전통적으로 OpenCV는 컬러 이미지를 BGR(파랑-초록-빨강) 인코딩을 사용하지만, Python의 다른 도구들은 더 일반적인 RGB(빨강-초록-파랑)를 사용합니다. 이미지를 올바르게 보이게 하려면 NumPy 배열에서 차원을 교환하거나 OpenCV 함수를 호출하여 RGB 색상 공간으로 변환해야 합니다:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)cvtColor 함수는 이미지를 그레이스케일로 변환하거나 HSV(색상-채도-명도) 색상 공간으로 변환하는 등 다른 색상 공간 변환에도 사용할 수 있습니다.
OpenCV를 사용하여 비디오를 프레임별로 로드할 수도 있습니다. 예제는 OpenCV 노트북에 나와 있습니다.
이미지를 신경망에 전달하기 전에 몇 가지 전처리 단계를 적용할 수 있습니다. OpenCV는 다음과 같은 작업을 수행할 수 있습니다:
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)를 사용하여 이미지를 크기 조정im = cv2.medianBlur(im,3)또는im = cv2.GaussianBlur(im, (3,3), 0)를 사용하여 이미지를 블러 처리- 이미지의 밝기와 대비를 변경하려면 이 Stackoverflow 노트를 참고하여 NumPy 배열 조작을 사용할 수 있습니다.
cv2.threshold/cv2.adaptiveThreshold함수를 호출하여 임계값 처리를 사용하는 것이 밝기나 대비 조정보다 선호될 수 있습니다.- 이미지에 다양한 변환을 적용:
- **광학 흐름**을 사용하여 이미지 내부의 움직임 이해.
OpenCV 노트북에서는 컴퓨터 비전을 사용하여 특정 작업을 수행할 수 있는 몇 가지 예제를 제공합니다:
- 점자 책 사진 전처리. 임계값 처리, 특징 탐지, 투시 변환 및 NumPy 조작을 사용하여 개별 점자 기호를 분리하고, 이를 신경망으로 추가 분류하는 방법에 초점을 맞춥니다.
![]() |
![]() |
![]() |
|---|
이미지 출처: OpenCV.ipynb
- 프레임 차이를 사용한 비디오에서의 움직임 탐지. 카메라가 고정되어 있다면, 카메라 피드의 프레임은 서로 매우 유사해야 합니다. 프레임이 배열로 표현되므로, 두 연속 프레임의 배열을 빼면 픽셀 차이를 얻을 수 있습니다. 정적인 프레임에서는 차이가 작고, 이미지에 상당한 움직임이 있을 때 차이가 커집니다.
이미지 출처: OpenCV.ipynb
-
광학 흐름을 사용한 움직임 탐지. 광학 흐름은 비디오 프레임에서 개별 픽셀이 어떻게 이동하는지 이해할 수 있게 합니다. 광학 흐름에는 두 가지 유형이 있습니다:
- 밀집 광학 흐름: 각 픽셀이 어디로 이동하는지 보여주는 벡터 필드를 계산합니다.
- 희소 광학 흐름: 이미지에서 일부 특징적인 요소(예: 가장자리)를 선택하고, 프레임 간의 궤적을 생성합니다.
이미지 출처: OpenCV.ipynb
✍️ 예제 노트북: OpenCV OpenCV 실습
OpenCV 노트북을 탐색하며 OpenCV로 실험을 진행해 봅시다.
움직임 탐지나 손끝 탐지와 같은 비교적 복잡한 작업도 순수하게 컴퓨터 비전만으로 해결할 수 있습니다. 따라서 컴퓨터 비전의 기본 기술과 OpenCV와 같은 라이브러리가 할 수 있는 일을 아는 것이 매우 유용합니다.
AI 쇼의 이 비디오를 시청하여 Cortic Tigers 프로젝트와 로봇을 통해 컴퓨터 비전 작업을 민주화하는 블록 기반 솔루션을 구축한 방법을 알아보세요. 이와 유사하게 새로운 학습자를 이 분야로 유도하는 데 도움을 주는 다른 프로젝트를 조사해 보세요.
광학 흐름에 대해 더 알아보려면 이 훌륭한 튜토리얼을 읽어보세요.
이 실습에서는 간단한 제스처가 포함된 비디오를 촬영하고, 광학 흐름을 사용하여 위/아래/왼쪽/오른쪽 움직임을 추출하는 것이 목표입니다.





