角点检测(3)SUSAN算子

来源:互联网 发布:node.js手游框架 编辑:程序博客网 时间:2024/06/11 02:06



#include "stdafx.h"#include <iostream>#include <stdlib.h>#include <cv.h>#include <cxcore.h>#include <highgui.h>#include <math.h>int main( int argc, char** argv ){    int height ,width ,step ,channels ;         int i,j,k,same ,max,min,thresh,sum;         uchar*data0,*data1 ;         //char *filename="result.bmp";        // IplImage* Img,*nimg; //声明IplImage指针    //载入图像       IplImage*  nimg = cvLoadImage("1.jpg");       IplImage*  Img = cvCreateImage(cvGetSize(nimg),8,1);cvCvtColor( nimg, Img, CV_BGR2GRAY );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=0;i<height;i++)// for(j=0;j<width;j++)    //{   // if(data0[i*step+j]>max) max = data0[i*step+j];    //if(data0[i*step+j]<min)   min = data0[i*step+j];//   }    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 = sum/37;        if(fabs( (float)(data0[(i+OffSetY[k])*step+(j+OffSetX[k])]-data0[i*step+j]))<=thresh)        same++;        if(same<18)        data1[i*step+j] = 255;        else        data1[i*step+j] = 0;     }   }   cvNamedWindow( "Image", 1 ); //创建窗口        cvShowImage( "Image", nimg ); //显示图像        cvWaitKey(0); //等待按键        cvDestroyWindow( "Image" );//销毁窗口        cvReleaseImage( &Img ); //释放图像        cvReleaseImage( &nimg );        return 0;}


0 0
原创粉丝点击