feature2D 模块包含了很多图像特征提取,匹配的相关算法,是图像模式识别重要的辅助库。
本部分包含如下内容:
特征检测和描述
特征检测器(Feature Detectors)通用接口
描述符提取器(Descriptor Extrators)通用接口
描述符匹配器(Descriptor Matchers)通用接口
通用描述符(Generic Descriptor)匹配器通用接口
关键点绘制函数和匹配功能绘制函数
我在讲述这些opencv带有的函数时,也会附带这些算法的详细内容,掌握算法的实际意义。
Harris角点的介绍见下面链接:
harris角点详解
Mat sourceImage = imread("1.jpg");
//resize(sourceImage,sourceImage,Size(800,600));
Mat grayImage;
cvtColor(sourceImage,grayImage,CV_BGR2GRAY);
Mat dstImage = Mat::zeros(sourceImage.size(),CV_32FC1);
cornerHarris(grayImage,dstImage,2,3,0.04,BORDER_DEFAULT);
//归一化与转换
Mat normImage;
normalize(dstImage,normImage,0,255,NORM_MINMAX,CV_32FC1,Mat());
Mat scaledImage;
convertScaleAbs(normImage,scaledImage);
for (int j=0;jfor (int i=0;iif (normImage.at<float>(j,i)>110) //阈值
{
circle(sourceImage,Point(i,j),5,Scalar(10,10,255),2,8,0);
}
}
}
另一方面,我们不再用非极大值抑制了,而选取容忍距离:容忍距离内只有一个特征点。
该算法首先选取一个具有最大最小特征值的点(即:max(min(e1,e2)),e1,e2是harris矩阵的特征值)作为角点,然后依次按照最大最小特征值顺序寻找余下的角点,当然和前一角点距离在容忍距离内的新角点忽略。
std::vector corners;
cv::goodFeaturesToTrack(grayImage,corners,
200,
//角点最大数目
0.01,
// 质量等级,这里是0.01*max(min(e1,e2)),e1,e2是harris矩阵的特征值
10);
// 两个角点之间的距离容忍度
harris().drawOnImage(sourceImage,corners);//标记角点
imshow("harris角点",sourceImage);