#include "HarrisCornerDlg.h" … void CImageToolDoc::OnHarrisCorner() { CHarrisCornerDlg dlg; if (dlg.DoModal() == IDOK) { CONVERT_DIB_TO_BYTEIMAGE(m_Dib, img) std::vector<IppPoint> corners; IppHarrisCorner(img, corners, dlg.m_nHarrisTh); BYTE** ptr = img.GetPixels2D(); int x, y; for (IppPoint cp : corners) { x = cp.x; y = cp.y; ptr[y - 1][x - 1] = ptr[y - 1][x] = ptr[y - 1][x + 1] = 0; ptr[y][x - 1] = ptr[y][x] = ptr[y][x + 1] = 0; ptr[y + 1][x - 1] = ptr[y + 1][x] = ptr[y + 1][x + 1] = 0; } CONVERT_IMAGE_TO_DIB(img, dib) AfxPrintInfo(_T("[해리스 코너 검출] 입력 영상: %s, Threshold: %d, 검출된 코너 갯수: %d"), GetTitle(), dlg.m_nHarrisTh, corners.size()); AfxNewBitmap(dib); } }
OnHarrisCorner 함수에서는 먼저 해리스 코너 검출 대화 상자를 띄워서 코너 응답 함수의 임계값을 입력 받는다. 그리고 IppHarrisCorner 함수를 호출하여 코너 포인트들의 정보를 std::vector<IppPoint> 타입의 변수 corners로 넘겨받는다. 그리고 검출된 코너 포인트 위치에 3×3 크기의 검정색 점을 표시하도록 하였다.
그림 11-26은 다양한 영상에 대하여 [해리스 코너 검출] 메뉴를 실행한 결과이다. 화면에 나타난 차일드 윈도우의 영상은 왼쪽부터 abcdef.bmp, house.bmp, pentagon.bmp 파일에서 코너 포인트를 찾을 결과이다. 세 개의 영상 모두 해리스 코너 응답 함수에 대한 임계값은 20000을 사용하였다.
