/*------------------------------------------------------------------ * 函数功能:角点检测 * 输入: IplImage* src -- 待检测的图片 * 输出: IplImage* dst -- 已标出角点的图片 -------------------------------------------------------------------*/ void GoodFeaturesToTrack(IplImage *src, IplImage *dst) { IplImage *bin = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); int threshold = Otsu(src); int corner_count = MAX_CORNERS; int i = 0; double qualityLevel = 0.05; double minDistance = 5.0; CvScalar color = CV_RGB(255,0,0); CvPoint2D32f corners[MAX_CORNERS]; cvThreshold(src, bin, threshold, 255, CV_THRESH_BINARY); //创建2个与原图大小相同的临时图像 IplImage *eig_image = cvCreateImage(cvGetSize(src), IPL_DEPTH_32F, 1); IplImage *temp_image = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F, 1); //角点检测 cvGoodFeaturesToTrack(src, eig_image, temp_image, corners, &corner_count, qualityLevel, minDistance, NULL); printf("num corners found: %d\n", corner_count); //在原图中将角点标记出来 if(corner_count > 0) { for (i=0; i <corner_count;++i) { cvCircle(src, cvPoint((int)(corners[i].x), (int)(corners[i].y)), 6, color, 2, CV_AA, 0); } } cvShowImage("binaryImage",src); cvWaitKey(); cvSaveImage(".\\corner_front_img.jpg", src); }