主要是使用函数 CV_EXPORTS_W void goodFeaturesToTrack( InputArray image, //输入图像
OutputArray corners, //角点数
int maxCorners, //最大角点数
double qualityLevel, //最大最小特征值乘法因子
double minDistance, //角点之间最小距离
InputArray mask=noArray(),
int blockSize=3,
bool useHarrisDetector=false,
double k=0.04
);
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "opencv2/core/core.hpp"
#include "opencv2/flann/miniflann.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/video.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/ml/ml.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/contrib/contrib.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
//#include <vector>
using namespace std;
using namespace cv;
Mat src, src_gray;
int maxCorners = 1000;
int maxTrackbar = 100;
RNG rng(12345);
char* source_window = "Image";
void goodFeaturesToTrack_demo(int, void*);
IplImage* bg_frame;
int main()
{
src = imread("xxx.png", 1);
cvtColor(src, src_gray, CV_BGR2GRAY);
namedWindow(source_window, CV_WINDOW_AUTOSIZE);
createTrackbar("角点个数:", source_window, &maxCorners, maxTrackbar, goodFeaturesToTrack_demo);
goodFeaturesToTrack_demo(0, 0);
waitKey(0);
return 0;
}
void goodFeaturesToTrack_demo(int, void*)
{
if (maxCorners<1)
{
maxCorners = 1;
}
//Shi-Tomasi 角点算法参数定义
vector<Point2f> corners;
double qualityLevel = 0.01;//最大最小特征值乘法因子
double minDistance = 10;//角点之间最小距离
int blockSize = 3;
bool useHarrisDetector = false;
double k = 0.04;
Mat copy;
copy = src.clone();
goodFeaturesToTrack(src_gray, corners, maxCorners, qualityLevel, minDistance, Mat(), blockSize, useHarrisDetector, k);
cout << "检测到角点数:" << corners.size() << endl;
int r = 1;
for (int i = 0; i<corners.size(); i++)
{
circle(copy, corners[i], r, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)), 2, 8, 0);
}
imshow(source_window, copy);
}