OpenCv之角點檢測PreCornerDetect算法

PreCornerDetect

計算用於角點檢測的特徵圖,

void cvPreCornerDetect( const CvArr* image, CvArr* corners, int aperture_size=3 );
image
輸入圖像.
corners
保存候選角點的特徵圖
aperture_size
Sobel 算子的核大小(見cvSobel).

函數 cvPreCornerDetect 計算函數D_x^2D_{yy}+D_y^2D_{xx} - 2D_xD_yD_{xy} 其中 D_{\cdot} 表示一階圖像差分,D_{\cdot \cdot} 表示二階圖像差分。 角點被認爲是函數的局部最大值:

// 假設圖像格式爲浮點數
IplImage* corners = cvCloneImage(image);
IplImage* dilated_corners = cvCloneImage(image);
IplImage* corner_mask = cvCreateImage( cvGetSize(image), 8, 1 );
cvPreCornerDetect( image, corners, 3 );
cvDilate( corners, dilated_corners, 0, 1 );
cvSub( corners, dilated_corners, corners );
cvCmpS( corners, 0, corner_mask, CV_CMP_GE );
cvReleaseImage( &corners );
cvReleaseImage( &dilated_corners );
上面選自opencv中文網站

下面直接上圖上代碼

效果圖:


代碼:

void preCorner() {                                                                                                                                 IplImage  *gray, *sobel,*binary, *frame;
	frame = cvLoadImage("girl.png");//加載圖像
	IplImage* temp = cvCreateImage(cvGetSize(frame), IPL_DEPTH_32F, 3);
	cvConvertScale(frame, temp);
	IplImage* out = cvCreateImage(cvGetSize(temp), IPL_DEPTH_32F, 1);
	cvCvtColor(temp, out, CV_RGB2GRAY);
	IplImage* corners = cvCloneImage(out);
	cvPreCornerDetect(out, corners, 3);
	cvNamedWindow("PreCornerDetect");
	cvShowImage("frame", frame);
	cvShowImage("PreCornerDetect", corners);
	cvWaitKey(0);

	cvReleaseImage(&out);
	cvReleaseImage(&corners);
	cvReleaseImage(&temp);
}


發佈了90 篇原創文章 · 獲贊 80 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章