功能:检测图像的哈里斯角点检测,判断出某一点是不是图像的角点
函数形式:
void cvCornerHarris( const CvArr* image, CvArr* harris_responce, int block_size, int aperture_size=3, double k=0.04 );
参数列表:
Image 输入图像
harris_responce存储哈里斯检测responces的图像。与输入图像等大
block_size 邻域大小(见关于cvCornerEigenValsAndVecs的讨论)
aperture_size 扩展 Sobel 核的大小(见 cvSobel)。格式.当输入图像是浮点数格式时,该参数表示用来计算差分固定的浮点滤波器的个数
k 哈里斯检测器的自由参数
角点:
一阶导数(即灰度的梯度)的局部最大所对应的像素点
两条及两条以上边缘的交点
图像中梯度值和梯度方向的变化速率都很高的点
角点处的一阶导数最大,二阶导数为0,它指示了物体边缘变化不连续的方向
步骤:
每个像素点在邻域内,计算22梯度的协方差矩阵,经过如下计算
找出输出图中的局部最大值,即找到了角点。
程序应用示例:
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
Mat src,src_gray;
src= imread("1.jpg");
cvtColor(src, src_gray, CV_RGB2GRAY); //灰度处理
Mat cornerStrength;
cornerHarris(src_gray, cornerStrength, 3, 3, 0.01); //检测
threshold(cornerStrength, cornerStrength, 0.0001, 255, THRESH_BINARY); //二值化灰度图
imshow("shiyan", cornerStrength);
waitKey(0);
return 0;
}