#include <stdio.h> #include <cv.h> #include <highgui.h> #pragma comment(lib, "cv.lib") #pragma comment(lib, "cxcore.lib") #pragma comment(lib, "highgui.lib") #define max_corners 100 int main( int argc, char** argv ) { int cornerCount=max_corners; CvPoint2D32f corners[max_corners]; double qualityLevel = 0.05; double minDistance = 5; IplImage *srcImage = 0, *grayImage = 0, *corners1 = 0, *corners2 = 0; int i; CvScalar color = CV_RGB(255,0,0); cvNamedWindow( "image", 2); //创建显示窗口 //加载一副图片 srcImage = cvLoadImage("test.png", 1); grayImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1); //将原图灰度化 cvCvtColor(srcImage, grayImage, CV_BGR2GRAY); corners1= cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_32F, 1); corners2= cvCreateImage(cvGetSize(srcImage),IPL_DEPTH_32F, 1); cvGoodFeaturesToTrack (grayImage, corners1, corners2, corners,&cornerCount, qualityLevel, minDistance, 0); printf("num corners found: %d\n", cornerCount); if(cornerCount>0) { for (i = 0; i < cornerCount; ++i) { cvCircle(srcImage, cvPoint((int)(corners[i].x), (int)(corners[i].y)), 6, color, 2, CV_AA, 0); } } cvShowImage("image", srcImage); cvWaitKey(0); cvReleaseImage(&srcImage); cvReleaseImage(&grayImage); cvReleaseImage(&corners1); cvReleaseImage(&corners2); return 0; }
// eyes_susan.cpp : 定义控制台应用程序的入口点。
//可以检测眼睛动态匹配轮廓的susan角点检测算法,准确率98
#include<math.h>
#include<stdlib.h>
#include<stdio.h>
#include "cv.h"
#include "highgui.h"
#pragma comment(lib, "cv.lib")
#pragma comment(lib, "cxcore.lib")
#pragma comment(lib, "highgui.lib")
int main( int argc, char** argv )
{
int height ,width ,step ,channels ;
int i,j,k,same ,max,min,sum;
float thresh;
uchar *data0,*data1 ;
//char *filename="result.bmp";
IplImage* Img, *nimg; //声明IplImage指针
//载入图像
Img = cvLoadImage( "test.png",0);
cvNamedWindow( "Image0", 2); //创建窗口
cvShowImage( "Image0", Img ); //显示图像
nimg = cvCreateImage(cvGetSize(Img),8,1);
height = Img->height;
width = Img->width;
step = Img->widthStep/sizeof(uchar);
channels = Img->nChannels;
data0 = (uchar*)Img->imageData;
data1 = (uchar*)nimg->imageData;
printf("Processing a %d X %d image with %d channels\n",width,height,channels);
int OffSetX[37] =
{ -1, 0, 1,
-2,-1, 0, 1, 2,
-3,-2,-1, 0, 1, 2, 3,
-3,-2,-1, 0, 1, 2, 3,
-3,-2,-1, 0, 1, 2, 3,
-2,-1, 0, 1, 2,
-1, 0, 1 };
int OffSetY[37] =
{
-3,-3,-3,
-2,-2,-2,-2,-2,
-1,-1,-1,-1,-1,-1,-1,
0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2,
3, 3, 3
};
max = min = data0[0];
for(i=3;i<height-3;i++)
for(j=3;j<width-3;j++)
{
same =0;
sum = 0;
for(k=0;k<37;k++)
{
sum+=data0[(i+OffSetY[k])*step+(j+OffSetX[k])];
thresh = (float)sum/37;
float data_fabs;
data_fabs= (float)(data0[(i+OffSetY[k])*step+(j+OffSetX[k])]-data0[i*step+j]);
if(fabs( data_fabs)<=thresh)
same++;
}
if(same<18)
nimg->imageData[i*step+j] = 255;
else
nimg->imageData[i*step+j] = 0;
printf("same = %d\n", same);
}
cvNamedWindow( "Image", 2); //创建窗口
cvShowImage( "Image", nimg ); //显示图像
cvWaitKey(0); //等待按键
cvDestroyWindow( "Image" );//销毁窗口
cvReleaseImage( &Img ); //释放图像
cvReleaseImage( &nimg );
return 0;
}