方法1:
cv::cvtColor(pimg0,pimg0,CV_BGR2GRAY);
cv::Canny(pimg0,pimg0,100,150,3); //边缘检测
cv::cornerHarris(pimg0,pimg0,
2, //邻域大小
5, //扩展Sobel核大小
0.01
); //检测角点
cv::threshold(pimg0,pimg0, 0.00001, 255, cv::THRESH_BINARY_INV); //角点结果二值化
方法2:(效果更好,处理更简单)
cv::Mat m = pimg0.clone();
cv::Mat pimg2 = m(rect); //剪切图像--拷贝图像
cv::Mat pimg3 = pimg0(rect); //剪切图像--拷贝图像
int nr2 = pimg3.rows;
int nc2 = pimg3.cols * pimg3.channels();
for(int j=0; j<nr2; j++){ //原图变色,方便查看标记结果
unsigned char * data0 = pimg3.ptr<uchar>(j);
for(int i=0; i<nc2; i++){
data0[i] =255- (255-data0[i])/2;
}
}
cv::Canny(pimg2,pimg2,100,150,3); //边缘检测
std::vector<cv::Point2f> corners;
int maxCorners = 500; //最大检测角点数
double qualityLevel = 0.01;
double minDistance = 10; //丙个角点之前的距离容忍度
cv::goodFeaturesToTrack(pimg2, corners,
maxCorners,
qualityLevel,
minDistance);
//绘制出角点
int r = 2;
for(int i=0; i<corners.size(); i++){
cv::circle(pimg3,corners[i], r, cv::Scalar(0,0,0),-1,8,0);
}
---------------------------------
更新:角点匹配方法
转自:http://blog.csdn.net/rueing839/article/details/48807477
- //【1】载入素材图
- Mat srcImage1 = imread("1.jpg", 1);
- Mat srcImage2 = imread("2.jpg", 1);
- if (!srcImage1.data || !srcImage2.data)
- {
- printf("读取图片错误,请确定目录下是否有imread函数指定的图片存在~! \n"); return false;
- }
- //【2】使用SURF算子检测关键点
- int minHessian = 700;//SURF算法中的hessian阈值
- SurfFeatureDetector detector(minHessian);//定义一个SurfFeatureDetector(SURF) 特征检测类对象
- std::vector<KeyPoint> keyPoint1, keyPoints2;//vector模板类,存放任意类型的动态数组
- //【3】调用detect函数检测出SURF特征关键点,保存在vector容器中
- detector.detect(srcImage1, keyPoint1);
- detector.detect(srcImage2, keyPoints2);
- //【4】计算描述符(特征向量)
- SurfDescriptorExtractor extractor;
- Mat descriptors1, descriptors2;
- extractor.compute(srcImage1, keyPoint1, descriptors1);
- extractor.compute(srcImage2, keyPoints2, descriptors2);
- //【5】使用BruteForce进行匹配
- // 实例化一个匹配器
- BruteForceMatcher< L2<float> > matcher;
- std::vector< DMatch > matches;
- //匹配两幅图中的描述子(descriptors)
- matcher.match(descriptors1, descriptors2, matches);
- //【6】绘制从两个图像中匹配出的关键点
- Mat imgMatches;
- drawMatches(srcImage1, keyPoint1, srcImage2, keyPoints2, matches, imgMatches);//进行绘制
- //【7】显示效果图
- imshow("匹配图", imgMatches);