실질적으로 사용한 함수는 goodFeaturesToTrack 함수가 아닌 cvGoodFeaturesToTrack 함수를 사용했다.
쉽게 말해서 최신 버전의 함수를 사용한 것이 아니라 옛날 버전의 함수를 사용했는데 그 이유가 있다..
최신 버전에서의 함수는 왜 그런지 자꾸 오류를 뿜어댔고 std::vector<cv::Point2f로 선언한 변수를 outputArray에 놓았을 경우 그 값이 18446743821561047315 가 나오는 폐단이 발생했다....
3일 동안의 삽질을 통해서 얻을 수 있는 교훈은 최신 버전에서 안 될 경우 구 버전에서 사용해 보자 는 것이다.
구 버전의 함수들만을 이용해 코딩을 해야하는데 최신 버전보다 코딩하기 까다롭다.....
[그림 1: 코너 특징점 검출]
[그림 1]에서 코너의 검출을 저정도 밖에 하지 못한 이유는 내가 num을 500으로 잡아서 그렇다.
500보다 크게 하면 더 많이, 적게 하면 더 적게 검출한다.
#include <opencv2\opencv.hpp>
int main()
{
IplImage *tmpImage = cvLoadImage("sample.png", CV_LOAD_IMAGE_GRAYSCALE);
CvPoint2D32f *corners = new CvPoint2D32f;
cv::Mat mask;
IplImage *gray;
int num = 500;
cvGoodFeaturesToTrack(tmpImage, NULL, NULL, corners, &num, 0.1,5);
for (long i = 0; i <num; i++) {
cvCircle(tmpImage, cvPointFrom32f(corners[i]), 3, CV_RGB(0, 0, 255), 2);
}
cvNamedWindow("image", CV_WINDOW_AUTOSIZE);
cvShowImage("image", tmpImage);
cv::waitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&tmpImage);
return 0;
}
최신 버전? 의 함수를 사용한 코드이다.