PreCornerDetect
計算用於角點檢測的特徵圖,
void cvPreCornerDetect( const CvArr* image, CvArr* corners, int aperture_size=3 );
- image
- 輸入圖像.
- corners
- 保存候選角點的特徵圖
- aperture_size
- Sobel 算子的核大小(見cvSobel).
函數 cvPreCornerDetect 計算函數 其中 表示一階圖像差分, 表示二階圖像差分。 角點被認爲是函數的局部最大值:
// 假設圖像格式爲浮點數 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);
}