1、
中值滤波-均值滤波-边缘检测-角点检测-基于opencv
ÖÐÖµÂ˲¨,¾ùÖµÂ˲¨,±ßÔµ¼ì²â,½Çµã¼ì²â,»ùÓÚopencv.txt¡°Áµ¡±ÊǸöºÜÇ¿º·µÄ×Ö¡£ËüµÄÉϰ벿ȡ×Ô¡°±ä̬¡±µÄ¡°±ä¡±£¬Ï°벿ȡ×Ô¡°±ä̬¡±µÄ¡°Ì¬¡±¡£#include
2、bool FilterAV2(IplImage* &image,int k); bool FilterMid(IplImage* &image,int k); bool FilterMid2(IplImage* &image,int k); bool FeatureTrack(IplImage* &image); bool EdgeTrack(IplImage* &image,int threshold1,int threshold2); int main(int argc,char *argv[])//argcÖ¸±äÁ¿µÄ¸öÊý£¬*argvÖ¸Ïò×Ö·û±äÁ¿ {
3、 IplImage *img=0; int height,width,step,channels; uchar *data; //ÔØÈëͼÏñ //img=cvLoadImage("OpenCvDemo.jpg",0);//ת»¯Îªµ¥Í¨µÀ£¬»Ò¶ÈͼÏñ5 img=cvLoadImage("OpenCvDemo.jpg",0); if (!img) { printf("could not load image file: %s\n","OpenCvDemo.jpg"); exit(0); } //»ñȡͼ
4、ÏñÊý¾Ý height=img->height; width=img->width; step=img->widthStep; channels=img->nChannels; data=(uchar*)img->imageData; printf("processing a %dx%d image with %d channels\n",height,width,channels); //´´½¨´°¿Ú cvNamedWindow("mainWin",CV_WINDOW_AUTOSIZE); cvMoveWindow("mainWin",100,
5、100);//ÒÆ¶¯´°¿Ú£¬ÒÔÆÁÄ»×óÉÏ½ÇµÄÆðµãµÄÆ«ÒÆÁ¿ //FilterAV2(img,3); //FilterAV(img,3); //FilterMid(img,3); //FilterMid2(img,3); //FilterAV(img,3); FeatureTrack(img); //EdgeTrack(img,60,80); //ÏÔʾͼÏñ cvShowImage("mainWin",img); //wait for a key cvWaitKey(0); //rele
6、ase the image
cvReleaseImage(&img);
return 0;
}
bool FilterAV(IplImage* &image,int k)
{//¾ùÖµÂ˲¨
IplImage *image2=cvCreateImage(cvSize(image->width,image->height),image->depth,1);
uchar *p=(uchar *)image2->imageData;//ÉêÇëimage2ͼÏñ¿Õ¼ä
int m=(k-1)/2;
for (int x=m;x
7、height-m;++x)
for (int y=m;y
8、 } image=cvCloneImage(image2);//¿½±´¸øÔͼÏñ cvReleaseImage(&image2);//Ïú»ÙÁÙʱ±äÁ¿ return true; } bool FilterAV2(IplImage* &image,int k) {//µ÷ÓÃcvSmoothº¯ÊýʵÏÖ IplImage *dstImage=0; dstImage=cvCreateImage(cvGetSize(image),image->depth,1); cvSmooth(image,dst
9、Image,CV_BLUR,k,k); //CV_BLURÔÚ3*3´óС½øÐоùÖµÂ˲¨ image=cvCloneImage(dstImage); cvReleaseImage(&dstImage); return true; } bool FilterMid(IplImage* &image,int k) {//ÖÐÖµÂ˲¨º¯Êý IplImage *image2=cvCreateImage(cvSize(image->width,image->height),image->depth,1); uchar *Im
10、agePix=(uchar *)image2->imageData;
int m=(k-1)/2;
for (int x=m;x
11、)*image->widthStep+y+j];
}
for (int i=0;i
12、PixArray[(k*k-1)/2]; } image=cvCloneImage(image2);//¿½±´¸øÔͼÏñ cvReleaseImage(&image2);//Ïú»ÙÁÙʱ±äÁ¿ return true; } bool FilterMid2(IplImage* &image,int k) { //IplImage *dstImage=0; //dstImage=cvCreateImage(cvGetSize(image),image->depth,1); //cvSmooth(image,
13、dstImage,CV_MEDIAN,k,k); ////CV_BLURÔÚ3*3´óС½øÐоùÖµÂ˲¨ //image=cvCloneImage(dstImage); //cvReleaseImage(&dstImage); cvSmooth(image,image,CV_MEDIAN,k,k); return true; } //½Çµã¼ì²âÓë±ßÔµ¼ì²â bool FeatureTrack(IplImage* &image) { CvPoint2D32f corners[100000]; int Co
14、rnerCount=0; IplImage *corners1=0,*corners2=0; corners1= cvCreateImage(cvGetSize(image), image->depth, 1); corners2= cvCreateImage(cvGetSize(image),image->depth, 1); cvGoodFeaturesToTrack(image,corners1,corners2,corners,&CornerCount,0.05,20,0); cout<<"Track over!"; // draw cir
15、cles at each corner location in the gray image and
// print out a list the corners
for (int i=0;i 16、
}
bool EdgeTrack(IplImage* &image,int threshold1,int threshold2)
{
IplImage *edge=0;
edge=cvCreateImage(cvGetSize(image),image->depth,1);
//cvNot(image,edge);
//Êý×éÈ¡·´²Ù×÷,ûÓÃÎÒ¾õµÃ
cvCanny(image,image,threshold1,threshold2,3);
//threshold1,threshold2ÖнÏСµÄ¿ØÖƱßÔµÁ¬½Ó£¬´óµÄ¿ØÖƱßÔµµÄ³õʼ·Ö¸î
//Á½¸ö¶¼ÊÇimageÒ²ÐС£¡£¡£‡åËÀÁË
return true;
}






