如果某一点在任意方向的微小扰动都会产生很大的灰度变化,则这个点称为角点。
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);