Shi-Tomasi角点检测算法

Shi-Tomasi角点检测算法

1、Shi-Tomasi概念;
2、API;
3、Code;

Shi-Tomasi概念

1、角点检测除了Harris角点检测算法外,还常常使用Shi-Tomasi算法,Shi-Tomasi算法是harris算法的改进,因此计算速度更快 , Shi-Tomasi算法于1994年在文章《Good Features to Track》中被提出;

API

1、Shi-Tomasi角点检测API: goodFeatureToTrack():
参数说明:
corners : 为输出角点坐标的集合数组;
qualityLevel : 角点检测的最小特征值,通常不会超过1(常取0.10/0.01);
maxCorners : 自定检测最大角点数目;
k : 常取(0.04-0.06);

Code

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

#define WIN_NAME "Shi-Tomasi角点检测"

Mat srcImage, grayImage;
int maxCornerNumber = 33;
int maxTrackbarNumber = 500;
RNG rng(12345);

void on_GoodFeatureToTrack(int, void *)
{
   
	if(maxCornerNumber <= 1) 
	{
   
		maxCornerNumber = 1;
	}
	//Shi-Tomasi参数准备
	vector<Point2f> corners;
	double qualityLevel = 0.01; //角点检测可以接受的最小特征值
	double minDistance = 10; //角点间的最小像素距离设置
	int blockSize = 3;  //计算导数自相关矩阵时指定的领域范围
	double k = 0.04;   //权重系数

	Mat copy = srcImage.clone(); //复制原图到一个临时变量中,作为感兴趣区域
	//Shi-Tomasi Test
	goodFeaturesToTrack(grayImage, corners, maxCornerNumber, qualityLevel, minDistance, Mat(), blockSize, false, k);

	//输出文字信息
	cout << ">此次检测到的角点数量为: " << corners.size() << endl;

	//绘制检测到的角点
	for (unsigned int i = 0; i < corners.size(); i++)
	{
   
		circle(copy, corners[i], 5, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)), -1, 8, 0);
	}

	imshow(WIN_NAME, copy);
}

int main(int argc, char** argv)
{
   
	srcImage = imread("C:\\Users\\hello\\Desktop\\3.jpg");
	cvtColor(srcImage, grayImage, CV_BGR2GRAY);

	namedWindow(WIN_NAME, WINDOW_AUTOSIZE);
	
	createTrackbar("最大角点数:", WIN_NAME, &maxCornerNumber, maxTrackbarNumber, on_GoodFeatureToTrack);
	
	//imshow(WIN_NAME, srcImage);

	
	on_GoodFeatureToTrack(0, 0);


	waitKey(0);
	return 0;
}

效果

计算速度比Harris快了很多!!!Shi-Tomasi算法可以简单输出角点的坐标点


识别角点,并输出像素值坐标:

全部评论

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
10-31 14:54
已编辑
门头沟学院 算法工程师
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务