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);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风晴03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值