角点检测(特征值,Harris,FAST)

来源:互联网 发布:桌面工作计划安排软件 编辑:程序博客网 时间:2024/06/06 23:55
#include "stdafx.h"#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <opencv2/features2d/features2d.hpp>using namespace cv;using namespace std;   int main (int argc, char **argv) {   // (1)load a specified file as a 3-channel color image   const char *imagename = argc > 1 ? argv[1] : "../image/library.png";   Mat eigen_img = imread(imagename);   if(!eigen_img.data)     return -1;   Mat harris_img = eigen_img.clone();   Mat fast_img = eigen_img.clone();     // (2)convert to a grayscale image and normalize it   Mat gray_img;   cvtColor(eigen_img, gray_img, CV_BGR2GRAY);   normalize(gray_img, gray_img, 0, 255, NORM_MINMAX);     // (3)detect and draw strong corners on the image based on Eigen Value   vector<Point2f> corners;   goodFeaturesToTrack(gray_img, corners, 80, 0.01, 5);   vector<Point2f>::iterator it_corner = corners.begin();   for(; it_corner!=corners.end(); ++it_corner) {     circle(eigen_img, Point(it_corner->x, it_corner->y), 1, Scalar(0,200,255), -1);     circle(eigen_img, Point(it_corner->x, it_corner->y), 8, Scalar(0,200,255));   }     // (4)detect and draw strong corners on the image using Harris detector   goodFeaturesToTrack(gray_img, corners, 80, 0.01, 3, Mat(), 3, true);   it_corner = corners.begin();   for(; it_corner!=corners.end(); ++it_corner) {     circle(harris_img, Point(it_corner->x, it_corner->y), 1, Scalar(0,255,0), -1);     circle(harris_img, Point(it_corner->x, it_corner->y), 8, Scalar(0,255,0 ));   }     // (5)detect corners using high-speed corner detection; FAST   int threshold = 100;   bool nonmax = true;   vector<KeyPoint> keypoints;   FAST(gray_img, keypoints, threshold, nonmax);   vector<KeyPoint>::iterator it_kp = keypoints.begin();   for(; it_kp!=keypoints.end(); ++it_kp) {     circle(fast_img, Point(it_kp->pt.x, it_kp->pt.y), 1, Scalar(50,0,255), -1);     circle(fast_img, Point(it_kp->pt.x, it_kp->pt.y), 8, Scalar(50,0,255));   }     // (6)show destination images, and quit when any key pressed   namedWindow("EigenValue",CV_WINDOW_AUTOSIZE);   namedWindow("Harris",CV_WINDOW_AUTOSIZE);   namedWindow("Fast",CV_WINDOW_AUTOSIZE);   imshow("EigenValue", eigen_img);   imshow("Harris", harris_img);   imshow("Fast", fast_img);   waitKey(0);     return 0; }