1. 程式人生 > >OpenCV入門:Harris角點檢測

OpenCV入門:Harris角點檢測

Harris角點檢測

#include <opencv2/opencv.hpp>  
#include <opencv2/imgproc/imgproc.hpp>  

using namespace cv;
/*
Harris角點檢測:void cornerHarris(InputArray src,OutputArray dst, int blockSize, int ksize, double k, intborderType=BORDER_DEFAULT )  


第一個引數,InputArray型別的src,輸入影象,即源影象,填Mat類的物件即可,且需為單通道8位或者浮點型影象。
第二個引數,OutputArray型別的dst,函式呼叫後的運算結果存在這裡,即這個引數用於存放Harris角點檢測的輸出結果,和源圖片有一樣的尺寸和型別。
第三個引數,int型別的blockSize,表示鄰域的大小,更多的詳細資訊在cornerEigenValsAndVecs()中有講到。
第四個引數,int型別的ksize,表示Sobel()運算元的孔徑大小。
第五個引數,double型別的k,Harris引數。
第六個引數,int型別的borderType,影象畫素的邊界模式,注意它有預設值BORDER_DEFAULT。更詳細的解釋,參考borderInterpolate( )函式。
*/
int main()
{ 
	namedWindow("原始圖",0);
	//以灰度模式載入影象並顯示
	Mat imageSrc = imread("build.jpg", 0);
	imshow("原始圖", imageSrc);


	//進行Harris角點檢測找出角點
	Mat cornerStrength;
	cornerHarris(imageSrc, cornerStrength, 2, 3, 0.01);
	
	namedWindow("角點檢測後的二值效果圖",0);
	//對灰度圖進行閾值操作,得到二值圖並顯示  
	Mat harrisCorner;
	threshold(cornerStrength, harrisCorner, 0.00001, 255, THRESH_BINARY);
	imshow("角點檢測後的二值效果圖", harrisCorner);


	waitKey(0);
	return 0;
}

效果圖: