입력 받은 화면으로 무언가 처리를 하기 앞서서.. 가장 필요한 것이 이진화 인 것 같다...
물론 이진화 없이 바로 처리를 하여도 되지만, 이진화를 하지않고 바로 처리를 하게 된다면,
예상되는 조건들이 너무 많아진다...
이 모든 것들이 이진화를 함으로 해서 흑이냐 백이냐만 판단하면 된다...
(물론, 이진화를 하면서 잃는 부분도 있겠지만, 장점이 더 큰 듯하다. )
일단 기본적인 셋팅은 웹캠 입력과 동일하고 이진화 함수만 추가하였다...
이전 포스팅 보기.
이진화 함수는..
cvThreshold(const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type) 라는 함수이다..
파라미터의 순서대로 이진화를 시킬 영상, 이진화가 된 후 저장될 영상, 경계가 되는 수치값, 그 것을 넘은 수치를 설정하는 값,
그리고 마지막으로 이진화 방식을 설정한다...
이진화 방식은 CV_THRESH_OTSU 으로 많이 하는데.. 그 외에도
#define CV_THRESH_BINARY 0 /* value = value > threshold ? max_value : 0 */
#define CV_THRESH_BINARY_INV 1 /* value = value > threshold ? 0 : max_value */
#define CV_THRESH_TRUNC 2 /* value = value > threshold ? threshold : value */
#define CV_THRESH_TOZERO 3 /* value = value > threshold ? value : 0 */
#define CV_THRESH_TOZERO_INV 4 /* value = value > threshold ? 0 : value */
#define CV_THRESH_MASK 7
이런 정의가 더 있다...
그리고, 이진화를 하려면 단일 채널을 만든 후, gray 변환을 해야한다...
지금처럼 RGB를 모두 추가하여 실행을 하면, 프로그램이 죽는다 ;;;
그래서 간단히 gray라는 이미지 공간을 하나 더 만들고,
gray = cvCreateImage( cvSize(640,480), 8 , 1) ; 로 이미지를 만든다..
여기서 사이즈는 받아올 이미지와 같아야 하고, 뒤의 1은 채널 수 인데 1로 설정한 건 단일 채널이란 뜻이다. 그다음.
cvCvtColor( const CvArr* src, CvArr* dst, int code ); 이 함수를 통하여, 색 공간을 변형 시켜 주면된다...
마지막 code는 F12로 따라가 보면, 많은 종류가 있는데 오늘은 이진화기 때문에, CV_BGR2GRAY 를 이용한다.
그렇게 해서 컴파일하면...
이런 화면이 나온다... 왼쪽이 원본 화면, 오른쪽이 이진화 화면이다.. 조명의 영향에 따라서..
또 색이 쉽게 바뀌는데 이것은 전혀 처리를 안한 것이기 때문에 또 여러가지 처리를 통해서 노이즈 제거라든지, 이런게 필요하다..
아래의 사진이 오늘 추가된 소스의 전부이다...
자세한 설명은 본문에 있기 때문에, 생략하고, 사진이 안보이면 클릭하면 크게 보인다...
'프로그래밍 > OpenCV' 카테고리의 다른 글
화면 전환, cvFlip() (0) | 2011.08.27 |
---|---|
[openCV] OpenCV 웹캠 입력 검은 화면이나 회색 화면이 뜰 때... (0) | 2011.08.16 |
[openCV] OpenCV 웹캠 영상 입력 받기 (5) | 2011.08.16 |
[openCV] OpenCV 2.1 버전 설치하기 ( VS 2008 ) (0) | 2011.08.16 |