opencv_角点检测

如果某一点在任意方向的微小扰动都会产生很大的灰度变化,则这个点称为角点。

Harris角点检测:

void cornerHarris(
		  InputArray src,//一般为灰度图像
		  OutputArray dst,//输出图像,和源图像具有一样的类型和尺寸
		  int blockSize,//表示邻域大小
		  int ksize,//Sobel()算子的孔径大小
		  double k,//Harris参数
		  intborderType=BORDER_DEFAULT)//图像像素的边界模式
double cv::threshold(
		     InputArray src;//输入图像
		     OutputArray dst;//输出图像
		     int thresh;//阈值
		     int maxval;//输出图像最大值
		     int type)//阈值类型

常用的阈值类型有:THRESH_BINARY、THRESH_BINARY_INV、THRESH_TRUNC、
THRESH_TOZERO、THRESH_TOZERO_INV
此图在这里插入图片描述

Shi-Tomasi角点检测:

void goodFeaturesToTrack(
		 	  InputArray srcImage,//输入图像,单通道图像,一般为灰度图像
		 	  OutputArray corners,//检测到的角点的输出向量
		 	  int maxCorners,//角点的最大数量
		 	  double qualityLevel,//角点可接受的最小特征值,取值范围0~1,一般取0.1、0.01
		 	  double minDistance,//角点之间的最小距离
		 	  InputArray mask=noArray(),//表示感兴趣区域
		 	  int blockSize=3,//计算导数自相关矩阵时指定的邻域范围
		 	  bool useHarrisDetector=false,//是否使用Harris角点检测
		 	  double k=0.04)//用于设置Hessian自相关矩阵行列式的相对权重的权重系数

亚像素级角点检测:

void cornerSubPix(
		   InputAarray image,//输入图像
		   InputOutputArray corners,//提供角点的初始坐标和精确的输出坐标
		   Size winSize,//搜索窗口的一半尺寸,即winSize=Size(5,5),则搜索窗口为11×11
		   Size zeroZone,//死区的一半尺寸,(-1,-1)表示没有死区
		   TermCriteria criteria)//角点迭代过程的终止条件,可以是最大迭代数目,可以是设定的精确度

TermCriteria类:

cv::TermCriteria::TermCriteria(
		     		int type,//终止条件(包括:COUNT、EPS、COUNT+EPS,另MAX_ITER等价于COUNT)
		     		int maxCount,//最大迭代次数
		     		double epsilon)//迭代结果精度

TermCriteria类的成员类型:

double cv::TermCriteria::epsilon;
int cv::TermCriteria::type;
int cv::TermCriteria::maxCount;

TermCriteria的使用举例:

TermCriteria  criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS,40,0.001);

猜你喜欢

转载自blog.csdn.net/qq_37390296/article/details/82822348