OpenCV的susan角点检测

申明,本文非笔者原创,原文转载自:http://blog.csdn.net/augusdi/article/details/9012555


[cpp]  view plain copy
  1. #include <stdio.h>  
  2. #include <cv.h>  
  3. #include <highgui.h>  
  4.   
  5. #pragma comment(lib, "cv.lib")  
  6. #pragma comment(lib, "cxcore.lib")  
  7. #pragma comment(lib, "highgui.lib")  
  8.   
  9. #define max_corners 100  
  10. int main( int argc, char** argv )  
  11. {  
  12.     int cornerCount=max_corners;  
  13.     CvPoint2D32f corners[max_corners];  
  14.     double qualityLevel = 0.05;  
  15.     double minDistance = 5;  
  16.     IplImage *srcImage = 0, *grayImage = 0, *corners1 = 0, *corners2 = 0;  
  17.     int i;  
  18.     CvScalar color = CV_RGB(255,0,0);  
  19.     cvNamedWindow( "image", 2); //创建显示窗口  
  20.     //加载一副图片  
  21.     srcImage = cvLoadImage("test.png", 1);  
  22.     grayImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1);  
  23.     //将原图灰度化  
  24.     cvCvtColor(srcImage, grayImage, CV_BGR2GRAY);  
  25.     corners1= cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_32F, 1);  
  26.     corners2= cvCreateImage(cvGetSize(srcImage),IPL_DEPTH_32F, 1);  
  27.     cvGoodFeaturesToTrack (grayImage, corners1, corners2, corners,&cornerCount, qualityLevel, minDistance, 0);  
  28.     printf("num corners found: %d\n", cornerCount);  
  29.     if(cornerCount>0)  
  30.     {  
  31.         for (i = 0; i < cornerCount; ++i)  
  32.         {  
  33.             cvCircle(srcImage, cvPoint((int)(corners[i].x), (int)(corners[i].y)), 6, color, 2, CV_AA, 0);  
  34.         }  
  35.     }  
  36.     cvShowImage("image", srcImage);  
  37.     cvWaitKey(0);  
  38.     cvReleaseImage(&srcImage);  
  39.     cvReleaseImage(&grayImage);  
  40.     cvReleaseImage(&corners1);  
  41.     cvReleaseImage(&corners2);  
  42.   
  43.     return 0;  
  44. }  

[cpp]  view plain copy
  1. // eyes_susan.cpp : 定义控制台应用程序的入口点。  
  2. //可以检测眼睛动态匹配轮廓的susan角点检测算法,准确率98  
  3.   
  4. #include<math.h>  
  5. #include<stdlib.h>  
  6. #include<stdio.h>  
  7. #include "cv.h"  
  8. #include "highgui.h"  
  9. #pragma comment(lib, "cv.lib")  
  10. #pragma comment(lib, "cxcore.lib")  
  11. #pragma comment(lib, "highgui.lib")  
  12.   
  13. int main( int argc, char** argv )  
  14. {  
  15.     int height ,width ,step ,channels ;  
  16.     int i,j,k,same ,max,min,sum;  
  17.     float thresh;  
  18.     uchar *data0,*data1 ;  
  19.     //char *filename="result.bmp";  
  20.     IplImage* Img, *nimg; //声明IplImage指针  
  21.     //载入图像  
  22.     Img = cvLoadImage( "test.png",0);  
  23.     cvNamedWindow( "Image0", 2); //创建窗口  
  24.     cvShowImage( "Image0", Img ); //显示图像  
  25.   
  26.     nimg = cvCreateImage(cvGetSize(Img),8,1);  
  27.   
  28.     height    = Img->height;  
  29.     width     = Img->width;  
  30.     step = Img->widthStep/sizeof(uchar);  
  31.     channels = Img->nChannels;  
  32.     data0   = (uchar*)Img->imageData;  
  33.     data1 =    (uchar*)nimg->imageData;  
  34.   
  35.     printf("Processing a %d X %d image with %d channels\n",width,height,channels);  
  36.     int OffSetX[37] =   
  37.     { -1, 0, 1,  
  38.     -2,-1, 0, 1, 2,  
  39.     -3,-2,-1, 0, 1, 2, 3,  
  40.     -3,-2,-1, 0, 1, 2, 3,  
  41.     -3,-2,-1, 0, 1, 2, 3,  
  42.     -2,-1, 0, 1, 2,  
  43.     -1, 0, 1 };  
  44.     int OffSetY[37] =   
  45.     {   
  46.         -3,-3,-3,  
  47.         -2,-2,-2,-2,-2,  
  48.         -1,-1,-1,-1,-1,-1,-1,  
  49.         0, 0, 0, 0, 0, 0, 0,  
  50.         1, 1, 1, 1, 1, 1, 1,  
  51.         2, 2, 2, 2, 2,  
  52.         3, 3, 3   
  53.     };  
  54.   
  55.     max = min = data0[0];  
  56.   
  57.     for(i=3;i<height-3;i++)  
  58.         for(j=3;j<width-3;j++)  
  59.         {  
  60.             same =0;  
  61.             sum = 0;  
  62.             for(k=0;k<37;k++)  
  63.             {  
  64.                 sum+=data0[(i+OffSetY[k])*step+(j+OffSetX[k])];  
  65.                 thresh = (float)sum/37;  
  66.                 float data_fabs;  
  67.                 data_fabs= (float)(data0[(i+OffSetY[k])*step+(j+OffSetX[k])]-data0[i*step+j]);  
  68.   
  69.                 if(fabs( data_fabs)<=thresh)  
  70.                     same++;  
  71.             }  
  72.   
  73.             if(same<18)  
  74.                 nimg->imageData[i*step+j] = 255;  
  75.             else  
  76.                 nimg->imageData[i*step+j]  = 0;  
  77.   
  78.             printf("same = %d\n", same);  
  79.   
  80.         }  
  81.   
  82.         cvNamedWindow( "Image", 2); //创建窗口  
  83.         cvShowImage( "Image", nimg ); //显示图像  
  84.         cvWaitKey(0); //等待按键  
  85.         cvDestroyWindow( "Image" );//销毁窗口  
  86.         cvReleaseImage( &Img ); //释放图像  
  87.         cvReleaseImage( &nimg );  
  88.         return 0;  
  89. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值