openCV——角点检测

来源:互联网 发布:熊猫直播for mac 编辑:程序博客网 时间:2024/06/16 23:15

//角点检测#include "stdafx.h"#include "cv.h"#include "highgui.h"#include "stdlib.h"#pragma comment(lib,"cv200.lib")#pragma comment(lib,"cxcore200.lib")#pragma comment(lib,"highgui200.lib")#pragma comment(lib,"cvaux200.lib")#define max_corners 100int _tmain(int argc, _TCHAR* argv[]){int cornercount= max_corners;CvPoint2D32f corners[max_corners];IplImage* srcimg= 0,*grayimg= 0,*corner1= 0,*corner2= 0;int i;CvScalar color= CV_RGB(255,0,0);srcimg= cvLoadImage("lian.bmp",1);if (!srcimg){return -1;}cvNamedWindow("image",1);grayimg= cvCreateImage(cvGetSize(srcimg),IPL_DEPTH_8U,1);cvCvtColor(srcimg,grayimg,CV_BGRA2GRAY);corner1= cvCreateImage(cvGetSize(srcimg),IPL_DEPTH_32F,1);corner1= cvCreateImage(cvGetSize(srcimg),IPL_DEPTH_32F,1);cvGoodFeaturesToTrack(grayimg,//输入图像corner1,//临时浮点32位图像,尺寸与输入一致corner2,//同上corners,//输出参数,检测到的角点&cornercount,//输出参数,检测到的焦点数目0.05,//最大最小特征值的乘法因子,可接受图像的最小因子5,//限制因子,角点的最小距离0,//为0,计算整个图像3,0,0.4);//在图像中寻找具有大特征值的角点printf("发现角点数:%d\n",cornercount);if (cornercount> 0){for (i=0;i<cornercount;i++){cvCircle(srcimg,cvPoint((int)(corners[i].x),(int)(corners[i].y)),6,color,2,CV_AA,0);}}cvShowImage("image",srcimg);cvWaitKey(0);cvReleaseImage(&srcimg);cvReleaseImage(&grayimg);cvReleaseImage(&corner1);cvReleaseImage(&corner2);return 0;}


 

函数 GoodFeaturesToTrack
确定图像的强角点
void cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image, CvArr* temp_image,
CvPoint2D32f* corners, int* corner_count,
double quality_level, double min_distance,
const CvArr* mask=NULL );

参数:
image
输入图像,8-位或浮点32-比特,单通道
eig_image
临时浮点32-位图像,尺寸与输入图像一致
temp_image
另外一个临时图像,格式与尺寸与 eig_image 一致
corners
输出参数,检测到的角点
corner_count
输出参数,检测到的角点数目
quality_level
最大最小特征值的乘法因子。定义可接受图像角点的最小质量因子。
min_distance
限制因子。得到的角点的最小距离。使用 Euclidian 距离
mask
ROI:感兴趣区域。函数在ROI中计算角点,如果 mask 为 NULL,则选择整个图像。 必须为单通道的灰度图,大小与输入图像相同。mask对应的点不为0,表示计算该点。
说明:函数 cvGoodFeaturesToTrack 在图像中寻找具有大特征值的角点。该函数,首先用cvCornerMinEigenVal 计算输入图像的每一个象素点的最小特征值,并将结果存储到变量 eig_image 中。然后进行非最大值抑制(仅保留3x3邻域中的局部最大值)。下一步将最小特征值小于 quality_level•max(eig_image(x,y)) 排除掉。最后,函数确保所有发现的角点之间具有足够的距离,(最强的角点第一个保留,然后检查新的角点与已有角点之间的距离大于 min_distance )。

原创粉丝点击