실무에서는 하드웨어의 한계 혹은 데이터 양의 한계로 딥러닝을 활용하지 못 하는 회사가 많으며, 이런 경우에는 머신러닝을 주로 사용하며, 여전히 전통적인 컴퓨터 비전을 사용하는 회사도 있다.
이미지 데이터를 다룰 때는 3차원 배열인 BGR 형식의 컬러 이미지가 사용되며, cv2.imshow() 함수로 이미지를 출력하고, VideoCapture()를 통해 웹캠 영상을 실시간으로 불러올 수 있습니다.
이때 키보드 입력은 ord()로 아스키 코드로 인식하고, 마지막에는 반드시 release()와 destroyAllWindows()로 종료한다.
이미지를 효율적으로 처리하기 위해선 컬러 데이터를 회색조로 변환하는 전처리가 자주 사용되며, 이는 BGR 각 채널에 가중치를 주어 사람의 시각에 기반한 밝기를 중심으로 변환한다.
이진화를 통해 특정 임계값 이상만 남기고 나머지는 제거하는 마스크 이미지도 많이 활용되며, bitwise_and() 연산으로 원하는 영역만 추출할 수 있다.
윤곽 감지는 findContours()를 통해 이진화된 이미지의 외곽을 찾는 방식이며, 글자 간 간격이 있는 경우엔 여러 개로 인식되는 한계가 있으나, boundingRect()를 통해 윤곽을 감싸는 사각형을 빠르게 계산할 수 있습니다.
실습에서는 Haar cascade 같은 전통적인 검출 기법도 다루지만, 이는 예측력이 떨어지는 편이며, 보다 성능이 우수한 SSD(dnn 기반)의 경우, blob 형태로 변환된 데이터를 입력으로 받아 예측을 수행합니다.