파이썬 기반 OpenCV 환경 구축과 첫걸음
컴퓨터 비전 분야에서 OpenCV는 실질적인 업계 표준으로 자리 잡았습니다. C++로 시작했으나 현재는 파이썬(Python) 환경에서의 활용도가 압도적입니다.
가장 먼저 터미널에 `pip install opencv-python`을 입력하여 라이브러리를 설치합니다. 추가로 영상 처리를 세밀하게 다루고 싶다면 `pip install opencv-contrib-python`을 설치하는 것이 권장됩니다.
이 확장 패키지에는 특허 기술이 포함된 알고리즘이나 최신 모듈이 담겨 있습니다. 설치가 완료되었다면 `import cv2`를 통해 호출 가능한 상태인지 확인하는 과정을 거칩니다.
버전 확인은 `cv2.__version__`을 통해 가능하며, 프로젝트 시작 전 현재 설치된 버전이 최소 4.5 이상인지 점검하는 습관이 필요합니다.
OpenCV는 오픈소스 컴퓨터 비전 라이브러리로, 파이썬 환경에서 pip install opencv-python 명령어로 간단히 설치할 수 있습니다. imread로 이미지를 불러와 cvtColor를 통해 색상 공간을 변환하거나 Canny 알고리즘으로 엣지를 검출하는 것부터 실습을 시작하는 것이 효율적입니다.
이미지 읽기, 쓰기 그리고 색상 변환의 원리
이미지 처리는 파일 로드에서 시작됩니다. `cv2.imread('image.jpg')`를 실행하면 이미지는 3차원 넘파이(NumPy) 배열로 메모리에 적재됩니다.
이때 주의할 점은 OpenCV가 이미지를 불러올 때 일반적인 RGB 순서가 아닌 BGR 순서로 읽어 들인다는 사실입니다. 색상이 의도와 다르게 출력된다면 `cv2.cvtColor(img, cv2.COLOR_BGR2RGB)`를 호출하여 색상 공간을 변환해야 합니다.
`cv2.imwrite('output.png', img)`를 사용하면 처리된 결과물을 별도 파일로 저장할 수 있습니다. 단순한 저장 외에도 2번째 인자에 화질 옵션을 설정할 수 있는데, JPEG 파일의 경우 `[cv2.IMWRITE_JPEG_QUALITY, 90]`과 같은 파라미터를 추가하여 압축률을 미세하게 조정하는 것이 가능합니다.
엣지 검출과 이미지 필터링 실습
특정 사물의 윤곽을 추출하는 엣지 검출은 컴퓨터 비전의 핵심입니다. Canny 알고리즘은 노이즈를 제거하고 경계선을 찾기에 가장 효과적입니다.
`cv2.Canny(image, 100, 200)` 함수를 사용하면 되는데, 여기서 100과 200은 각각 최소값과 최대값 임계치를 의미합니다. 이 임계치를 낮추면 잡음이 많아지고, 높이면 미세한 윤곽이 사라지는 트레이드오프 관계가 존재합니다.
실무에서는 블러링(Blurring)을 먼저 적용하여 노이즈를 억제한 뒤 Canny를 수행하는 것이 정석입니다. `cv2.GaussianBlur(img, (5, 5), 0)`을 통해 이미지를 5x5 커널 사이즈로 부드럽게 만든 뒤 윤곽선을 따내면 훨씬 정교한 결과물을 얻을 수 있습니다.
좌표계와 ROI 설정의 디테일
이미지 처리 중 특정 영역만 잘라내어 분석하고 싶을 때는 ROI(Region of Interest) 기능을 사용합니다. OpenCV에서 이미지는 넘파이 배열이기에 `img[y:y+h, x:x+w]`와 같은 슬라이싱 기법으로 간단하게 처리됩니다.
이때 좌표계는 좌측 상단이 (0,0)임을 명심해야 합니다. 1920x1080 해상도의 풀HD 이미지를 다룰 때 좌표를 잘못 설정하면 `IndexError`가 발생하거나 검은색 여백이 생기는 현상이 잦습니다.
항상 `img.shape`를 통해 이미지의 가로, 세로 길이를 확인하고 연산을 수행하십시오. 또한, 실시간 영상 스트리밍을 처리할 때는 `cv2.waitKey(1) & 0xFF == ord('q')` 조건을 활용해 루프를 종료하는 로직을 미리 구현해두는 것이 안정적인 프로그램을 만드는 지름길입니다.