功能:檢測圖像的哈里斯角點檢測,判斷出某一點是不是圖像的角點
函數形式:
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;
}