栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

opencv (五十二)Shi-Tomas角点检测

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

opencv (五十二)Shi-Tomas角点检测

小白学视觉,笔记,扩展

Harris存在的弊端,
提出Shi-Tomas

#include 
#include

using namespace cv;
using namespace std;

int main()
{
	Mat img = imread("lena.png");
	if (!img.data)
	{
		cout << "读取图像错误,请确认图像文件是否正确" << endl;
		return -1;
	}

	Mat gray,img2;
	img.copyTo(img2);
	cvtColor(img, gray, COLOR_BGR2GRAY);
	// Detector parameters

	//提取角点
	int maxCorners = 100;  //检测角点数目
	double quality_level = 0.01;  //质量等级,或者说阈值与最佳角点的比例关系
	double minDistance = 0.04;  //两个角点之间的最小欧式距离
	vector corners;
	goodFeaturesToTrack(gray, corners, maxCorners, quality_level, minDistance, Mat(), 3, false);

	//绘制角点
	vector keyPoints;  //存放角点的KeyPoint类,用于后期绘制角点时用

	RNG rng(10086);
	for (int i = 0; i < corners.size(); i++)
	{
		//第一种绘制角点方法,用circle()函数绘制角点
		int b = rng.uniform(0, 256);
		int g = rng.uniform(0, 256);
		int r = rng.uniform(0, 256);
		circle(img, corners[i], 5, Scalar(b,g,r),2,8,0);

		//将角点存放在KeyPoint类中,用于第二种绘制方式使用
		KeyPoint keyPoint;
		keyPoint.pt = corners[i];
		keyPoints.push_back(keyPoint);
	}

	//第二种方式绘制角点,用drawKeypoints()函数绘制角点坐标
	drawKeypoints(img2, keyPoints, img2);
	imshow("用circle()绘制角点", img);
	imshow("用drawKeypoints()函数绘制角点", img2);
	waitKey(0);
	return 0;
}

分别用circle()函数,drawKeypoints()函数绘制角点,进行对比;

circle()可自由调整圆的大小和颜色,但需多次调用,时间复杂度高;
drawKeypoints()函数绘,圆大小固定,实现方便简单,一次调用完成。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779224.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号