AR을 시작하면서 처음 떠오른 것이 바로, 해리포터에 나오는 신문(예언자 일보?)이다.
얼핏보면 일반 신문과 다를바 없는 신문이지만, 신문의 사진들은 사진이 아닌 동영상이다.
AR 첫 주제로 해리포터 신문, 일명 멀티미디어 신문을 만들어보고자 한다.
원리 자체는 간단하다.
종이에 기사를 프린트하되, 영상이 들어갈 부분은 2D 마커로 대치한다.
캠이 기사를 비출 때 마커를 인식하여 그 마커 위에 영상을 뿌려주는 것이 과제의 전부이다.
본 장에서는 OpenCV를 이용하여 영상을 이진화하는 방법에 대해 살펴본다.
1. 버튼 만들기
- 체크박스를 하나 추가한다. (Push Like를 True로 두는 것은 단지 내 스타일일 뿐 다른 의미는 없다.)
2. 변수 추가
- 이진화 버튼이 체크 여부를 확인할 수 있도록 변수 설정
3. 클릭 이벤트의 처리
- 이진화 영상은 다이얼로그에 출력하지 않고 새로 윈도우를 생성하여 보여주도록 한다.
4. 타이머 내부 수정
- 이진화를 선택해둔 경우에만 영상을 이진화 하여 화면에 출력한다.
5. 결과
얼핏보면 일반 신문과 다를바 없는 신문이지만, 신문의 사진들은 사진이 아닌 동영상이다.
AR 첫 주제로 해리포터 신문, 일명 멀티미디어 신문을 만들어보고자 한다.
원리 자체는 간단하다.
종이에 기사를 프린트하되, 영상이 들어갈 부분은 2D 마커로 대치한다.
캠이 기사를 비출 때 마커를 인식하여 그 마커 위에 영상을 뿌려주는 것이 과제의 전부이다.
본 장에서는 OpenCV를 이용하여 영상을 이진화하는 방법에 대해 살펴본다.
OpenCV 설정 및 MFC 프로그램 기본에 대한 사항은 이전 글을 참고할 것
강좌 01. MFC로 OpenCV 시작하기
강좌 02. 다이얼로그(Static Control)에 이미지 출력하기
강좌 03. 다이얼로그에 캠 영상 입력받기
강좌 01. MFC로 OpenCV 시작하기
강좌 02. 다이얼로그(Static Control)에 이미지 출력하기
강좌 03. 다이얼로그에 캠 영상 입력받기
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() 함수는 실제로 이진화를 수행하는 함수로,
세 번 째 인수는 문턱치를 설정하고,
네 번 째 인수는 문턱치를 넘어선 픽셀들을 어떤 값으로 설정할 것인지를,
다섯 번 째 인수는 이진화 알고리즘을 선택할 수 있다.
이는 입력으로 들어가는 영상의 각 채널을 이진화 한다.
이런 이유로 컬러영상(3개 채널)을 이진화 하는 경우, R, G, B 각각을 이진화 하기 때문에
아래와 같이 의도하지 않은 영상을 얻게 될 수도 있다.
그런 이유 때문에 이진화 전에는 cvCvtColor()를 이용하여 Gray로 변환 후 이진화 한다.
cvCvtColor()의 세 번 째 인수는 어떤 컬러맵으로 변환할 것인지 선택할 수 있으며,
OpenCV에서 제공하는 방법들은 CV_BGR2GRAY 뿐만 아니라
CV_BGR2YCrCb, CV_BGR2HSV, CV_BGR2Lab 등 여러가지이며 이는 cv.h 파일에서 확인할 수 있다.
cvThreshold() 함수는 실제로 이진화를 수행하는 함수로,
세 번 째 인수는 문턱치를 설정하고,
네 번 째 인수는 문턱치를 넘어선 픽셀들을 어떤 값으로 설정할 것인지를,
다섯 번 째 인수는 이진화 알고리즘을 선택할 수 있다.
5. 결과
'[ 프로그래밍 ] > 강좌' 카테고리의 다른 글
OpenCV 강좌 06. 마커 추출 (1) - 잡영 제거 (8) | 2009.07.02 |
---|---|
OpenCV 강좌 05. 레이블링(Blob Labeling) (35) | 2009.07.01 |
OpenCV 강좌 03. 다이얼로그에 캠 영상 입력받기 (25) | 2009.06.25 |
OpenCV 강좌 02. 다이얼로그(Static Control)에 이미지 출력하기 (53) | 2009.06.25 |
OpenCV 강좌 01. MFC로 OpenCV 시작하기 (이미지 열기) (20) | 2009.06.25 |