aihot  2017-05-31 22:22:22  OpenCV |   查看评论   

 OpenCV角点检测小结

 
1,cvGoodFeaturesToTrack,cvCornerMinEigenVal,CornerEigenValsAndVecs是一类,用到了图像差分的相关矩阵。
 
2,CornerHarris,利用CornerEigenValsAndVecs得到的图像差分相关矩阵,据其特征值和向量,判断角点,   Harris角点探测器R(x,y)=det(M)-k*trace^2(M)
 
3,FindCornerSubPix,子象素级角点定位的实现是基于对向量正交性的观测而实现的。貌似适合棋盘格特征点检测,有待研究。
 
4,cvPreCornerDetect,计算一个二阶导多项式,角点被认为是函数的局部最大值。其实就是K-R法,利用了梯度的变化率在边缘走   向的投影能反映尖锐程度。试验发现是一种比cvGoodFeaturesToTrack粗略的办法。
 
注意:1,2,4都是检测像素级的角点。

 

  1. #include "stdafx.h"
  2. #include "cv.h"
  3. #include "highgui.h"
  4. #include "cxcore.h"
  5. #define max_corners 500

  6.  

  7. int _tmain(int argc, _TCHAR* argv[])
  8. {
  9.     int cornerCount=max_corners;
  10.     CvPoint2D32f corners[max_corners];
  11.     double qualityLevel;
  12.     double minDistance;
  13.     IplImage *srcImage = 0, *grayImage = 0, *corners1 = 0, *corners2 = 0;
  14.     int i;
  15.     CvScalar color = CV_RGB(255,0,0);
  16.    
  17.     cvNamedWindow( "image", 1 ); // 创建名为“image”的HighGUI窗口
  18.    
  19.     //加载要处理的图像
  20.     srcImage = cvLoadImage("D://zero//VasoR.bmp",1);
  21.    
  22.     grayImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1);
  23.    
  24.     //复制源图像转换格式后复制图像
  25.     cvCvtColor(srcImage, grayImage, CV_BGR2GRAY);
  26.    
  27.     //创建与复制的图像相同大小的空图像
  28.     corners1= cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_32F, 1);
  29.     corners2= cvCreateImage(cvGetSize(srcImage),IPL_DEPTH_32F, 1);
  30.    
  31.     cvGoodFeaturesToTrack (grayImage, corners1, corners2, corners,
  32.         &cornerCount, 0.05, 5, 0);
  33.    
  34.     printf("num corners found: %d/n", cornerCount);
  35.    
  36.     // 在灰色图像中的每个角落位置绘制圆形,并打印出一个列表
  37.     if(cornerCount>0)
  38.     {
  39.         for (i=0; i<cornerCount; i++)
  40.         {
  41.             cvCircle(srcImage, cvPoint((int)(corners[i].x), (int)(corners[i].y)), 1,
  42.                 color, 2, CV_AA, 0);
  43.         }
  44.     }
  45.    
  46.     cvShowImage( "image", srcImage );
  47.     cvWaitKey(0); // 等待钥匙。功能有

  48.     cvDestroyWindow("image");
  49.     cvReleaseImage(&srcImage);
  50.     cvReleaseImage(&grayImage);
  51.     cvReleaseImage(&corners1);
  52.     cvReleaseImage(&corners2);
  53.     return 0;
  54. }
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自基于opencv的角点检测

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]