#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; }