본문 바로가기
[ 프로그래밍 ]/강좌

OpenCV 강좌 04. 영상 이진화 하기

by K. Martin 2009. 6. 30.
AR을 시작하면서 처음 떠오른 것이 바로, 해리포터에 나오는 신문(예언자 일보?)이다.


얼핏보면 일반 신문과 다를바 없는 신문이지만, 신문의 사진들은 사진이 아닌 동영상이다.
AR 첫 주제로 해리포터 신문, 일명 멀티미디어 신문을 만들어보고자 한다.

원리 자체는 간단하다.
종이에 기사를 프린트하되, 영상이 들어갈 부분은 2D 마커로 대치한다.
캠이 기사를 비출 때 마커를 인식하여 그 마커 위에 영상을 뿌려주는 것이 과제의 전부이다.


본 장에서는 OpenCV를 이용하여 영상을 이진화하는 방법에 대해 살펴본다.




1. 버튼 만들기
- 체크박스를 하나 추가한다. (Push Like를 True로 두는 것은 단지 내 스타일일 뿐 다른 의미는 없다.)

2. 변수 추가
- 이진화 버튼이 체크 여부를 확인할 수 있도록 변수 설정

3. 클릭 이벤트의 처리
- 이진화 영상은 다이얼로그에 출력하지 않고 새로 윈도우를 생성하여 보여주도록 한다.

4. 타이머 내부 수정
- 이진화를 선택해둔 경우에만 영상을 이진화 하여 화면에 출력한다.

IplImage 타입의 영상을 이진화 하기 위해 사용하는 함수는 cvThreshold라는 함수이며,
이는 입력으로 들어가는 영상의 각 채널을 이진화 한다.
이런 이유로 컬러영상(3개 채널)을 이진화 하는 경우, R, G, B 각각을 이진화 하기 때문에
아래와 같이 의도하지 않은 영상을 얻게 될 수도 있다.



그런 이유 때문에 이진화 전에는 cvCvtColor()를 이용하여 Gray로 변환 후 이진화 한다.
cvCvtColor()의 세 번 째 인수는 어떤 컬러맵으로 변환할 것인지 선택할 수 있으며,
OpenCV에서 제공하는 방법들은 CV_BGR2GRAY 뿐만 아니라 
CV_BGR2YCrCb, CV_BGR2HSV, CV_BGR2Lab 등 여러가지이며 이는 cv.h 파일에서 확인할 수 있다.


cvThreshold() 함수는 실제로 이진화를 수행하는 함수로,
세 번 째 인수는 문턱치를 설정하고,
네 번 째 인수는 문턱치를 넘어선 픽셀들을 어떤 값으로 설정할 것인지를,
다섯 번 째 인수는 이진화 알고리즘을 선택할 수 있다.



5. 결과