
1. 들어가며: 빈 주차 공간, 왜 카메라로 찾기 어려울까?
도심 속 주차난은 어제오늘 일이 아닙니다. 운전자들은 빈자리를 찾아 주차장을 몇 바퀴씩 돌곤 합니다. "CCTV로 빈자리를 자동으로 알려주면 얼마나 좋을까?"라는 단순한 아이디어에서 이 프로젝트는 시작되었습니다.
하지만 막상 Python과 OpenCV를 들고 실제 주차장 영상에 도전해 보니, 현실은 튜토리얼과 달랐습니다. 주차된 차량은 움직이지 않기 때문에 일반적인 '모션 감지'로는 잡아낼 수 없었고, 시간대에 따라 변하는 햇빛과 그림자는 빈자리를 차량으로 오인하게 만드는 주범이었습니다.
이번 포스팅에서는 실제 주차장 CCTV 영상을 활용해 차량 유무를 정확히 판단하는 지능형 주차 관제 시스템을 구축하면서 겪었던 기술적 난관과 해결 과정을 공유합니다.
2. 핵심 접근 전략: ROI(관심 영역) 설정과 변화 감지
전체 화면을 분석하는 것은 비효율적이고 부정확합니다. 제가 선택한 방법은 주차구획선 하나하나를 **ROI(Region of Interest, 관심 영역)**로 지정하고, 각 영역 내부의 픽셀 변화를 분석하는 것입니다.
시스템 파이프라인:
- 주차면 좌표 설정: 카메라가 고정된 상태에서 주차 라인에 맞춰 사각형 좌표(ROI)를 미리 정의합니다.
- 영상 전처리: 입력된 프레임을 흑백(Grayscale)으로 변환하고, 노이즈 제거를 위해 가우시안 블러(Gaussian Blur)를 적용합니다.
- 상태 판단: 각 ROI 영역 내의 픽셀 변화량(예: 엣지 검출량 또는 임계값 처리 후의 흰색 픽셀 수)을 측정하여 차량 유무를 판단합니다.
아래는 프로젝트에 사용된 테스트 주차장의 초기 설정 모습입니다.

3. 난관 봉착: 햇빛과 그림자의 역습
초기에는 단순히 각 ROI 내의 픽셀 평균값을 이용했습니다. 차가 있으면 어두워지고(값이 낮아짐), 없으면 아스팔트 색(값이 높아짐)이 될 거라 예상했죠.
하지만 야외 주차장의 환경은 가혹했습니다. 구름이 걷히고 강한 햇빛이 비추자, 차량이 만들어내는 진한 그림자가 옆의 빈 주차 공간까지 침범했습니다. 시스템은 이 그림자를 차량으로 오인하여 '주차됨'으로 잘못 표시하기 시작했습니다. 반대로 아스팔트 색과 비슷한 회색 차량은 감지하지 못하는 경우도 발생했습니다.
단순한 밝기 비교만으로는 한계가 명확했습니다.
4. 문제 해결: 적응형 임계값과 엣지 검출의 결합
조명 변화에 강인한 시스템을 만들기 위해 두 가지 기법을 도입했습니다.
- 적응형 임계값 (Adaptive Thresholding): 이미지 전체에 하나의 기준을 적용하는 것이 아니라, 각 ROI 영역 주변의 밝기를 고려하여 유동적인 기준을 적용했습니다. 이를 통해 그림자가 진 영역에서도 차량의 형태를 더 잘 분리해낼 수 있었습니다.
- Canny 엣지 검출 (Edge Detection): 단순히 밝기가 아니라 '복잡도'를 보았습니다. 빈 주차 공간은 아스팔트의 단순한 질감만 있지만, 차량이 주차된 공간은 차량의 윤곽선, 창문, 바퀴 등으로 인해 훨씬 많은 '엣지(선)'가 검출됩니다.
이 두 가지를 조합하여 각 ROI 내의 '엣지 픽셀 수'가 일정 수준을 넘으면 차량이 있는 것으로 판단하는 로직을 완성했습니다.
아래는 개선된 로직이 적용된 실제 작동 화면입니다.

5. 최종 결과 및 활용: 실시간 주차 현황 대시보드
개선된 알고리즘은 시간대별 조명 변화에도 95% 이상의 높은 정확도를 보여주었습니다. 마지막으로, 이 데이터를 시각화하여 관리자가 한눈에 주차장 상황을 파악할 수 있는 간단한 대시보드 UI를 구현했습니다.

이 프로젝트를 통해 컴퓨터 비전 기술이 실제 환경에서 어떻게 적용되는지 깊이 이해할 수 있었습니다. 특히 '완벽한 알고리즘'보다 '환경에 맞는 전처리'가 더 중요하다는 것을 깨달았습니다. 다음 단계로는 딥러닝 모델(YOLO)을 도입하여 주차선이 없는 비정형 주차장에서도 작동하는 시스템에 도전해볼 계획입니다.
'Computer Vision + Python > 산업 응용 & 비즈니스활용 (전문가)' 카테고리의 다른 글
| 연구실 밖으로 나온 AI: 실제 농가 현장에서의 파이썬 병해충 탐지 시스템 구축과 데이터 불균형 극복기 (0) | 2026.01.06 |
|---|---|
| 실전 리테일 분석: Python과 CCTV로 고객의 숨은 니즈를 파악하는 행동 분석 시스템 구축기 (0) | 2026.01.05 |
| 실전 Python 보안 프로젝트: 이미지 속 위험물(흉기/금지물) 탐지 시스템 구축과 오탐(False Positive) 극복기 (0) | 2026.01.03 |
| 이론을 넘어선 실전: Python 차량 번호 인식(LPR) 및 위반 감지 시스템 구축기 (0) | 2026.01.02 |
| 실전 Python DMS 구현: 졸음운전 방지를 위한 눈 깜빡임 감지(EAR) 알고리즘 최적화 (0) | 2026.01.01 |