比Harris角點檢測更爲精確的一種檢測角點的方式
效果圖:
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
//自定義角點最大值
int maxcorner = 50;
//滑動條最大值
int maxTrackBar = 150;
const char* src_window = "Image";
//輸入圖片
Mat src, src_gray;
//隨機顏色
RNG rng(1235);
//回調函數
void goodFeatureToTrack_Demo(int, void*);
int main()
{
//讀入圖片
src = imread("test.jpg");
//轉換顏色,以便進行檢測
cvtColor(src, src_gray, COLOR_RGB2GRAY);
//創建窗口
namedWindow(src_window,WINDOW_AUTOSIZE);
//創建滑動條
createTrackbar("max_corners", src_window, &maxcorner, maxTrackBar, goodFeatureToTrack_Demo);
//顯示圖片
imshow(src_window, src);
//回調函數
goodFeatureToTrack_Demo(0, 0);
waitKey(0);
return 0;
}
void goodFeatureToTrack_Demo(int, void *)
{
//儲存所檢測到的點
vector<Point2f> corners;
//複製圖像,便於顯示
Mat copy = src.clone();
//調用goodFeaturesToTrack
goodFeaturesToTrack(src_gray, corners, maxcorner, 0.01, 10, Mat(), 3, false, 0.04);
//標記角點
for (size_t i = 0; i < corners.size(); i++)
{
circle(copy, corners[i], 3, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)), 2);
}
//顯示標記結果
imshow(src_window, copy);
}