opencv之基于颜色空间的投影追踪

来源:互联网 发布:gis软件的基本功能 编辑:程序博客网 时间:2024/04/27 18:01

直接上代码。本例程是基于直方图反向投影的颜色追踪

#include<cv.h>#include<highgui.h>#include<stdio.h>#pragma comment(lib,"cv.lib")#pragma comment(lib,"cxcore.lib")#pragma comment(lib,"cvaux.lib")#pragma comment(lib,"highgui.lib") int main(){IplImage* obj = cvLoadImage("hand.jpg",1); //待搜索的目标IplImage* obj_hsv = cvCloneImage(obj); //待搜索的目标的HSV图像cvCvtColor(obj,obj_hsv,CV_BGR2HSV);//转换到HSV空间IplImage* h_obj =  cvCreateImage(cvGetSize(obj_hsv),8,1);//H通道cvSplit(obj_hsv,h_obj,0,0,0);//分离到H空间 int size  = 180; //转换到HSV空间的H通道颜色范围float range[] ={0,180};float *ranges[] ={range};CvHistogram*  hist = cvCreateHist(1,&size,CV_HIST_ARRAY, ranges); //创建H通道的颜色直方图cvCalcHist(&h_obj,hist); //计算颜色直方图 //加载包含目标的图像IplImage* image =  cvLoadImage("hand1.jpg",1);IplImage* image_hsv = cvCloneImage(image); //待搜索的目标的HSV图像cvCvtColor(image,image_hsv,CV_BGR2HSV);//转换到HSV空间IplImage* h_image =  cvCreateImage(cvGetSize(image),8,1);cvSplit(image_hsv,h_image,0,0,0);//分离到H空间IplImage* dist =  cvCreateImage(cvGetSize(image),8,1);//计算反向投影    cvCalcBackProject(&h_image, dist, hist);//开运算    IplConvKernel *kernel = cvCreateStructuringElementEx(31,31,15,15,CV_SHAPE_RECT);      cvMorphologyEx(dist,dist,NULL,kernel,CV_MOP_OPEN);  cvSave("1.XML",dist);cvNamedWindow("result",1);cvShowImage("result",dist);cvWaitKey();//释放内存空间cvReleaseImage(&obj);cvReleaseImage(&obj_hsv);cvReleaseImage(&h_obj);cvReleaseHist(&hist);cvReleaseImage(&image);cvReleaseImage(&image_hsv);cvReleaseImage(&h_image);cvReleaseImage(&dist);cvReleaseStructuringElement(&kernel);cvDestroyWindow("result");return 0;}

 

如果要定位图像中的物体,可以参照下该博文:http://blog.csdn.net/fdl19881/article/details/6726438

原创粉丝点击