#include <cv.h>
#include <highgui.h>
#include <stdio.h>
IplImage *Image1,*Image2;
IplImage *HSV;
IplImage *HueImage,*SaturationImage,*ValueImage;
IplImage *ImageArray[3];
IplImage *BackProjectImage;
CvHistogram *Histogram1;
IplImage *HistogramImage1;
CvPoint Point1,Point2;
int HueValue=0;
int HistogramBins[3] ={180,256,256};
int HistogramBinWidth;
float HistogramRange1[6]={0,180,0,255,0,255};
float *HistogramRange[3]={&HistogramRange1[0],&HistogramRange1[2],&HistogramRange1[4]};
void onTrackbar(int position);
int main()
{
Image1 =cvLoadImage("lena.jpg",1);
HSV = cvCreateImage( cvGetSize(Image1),8,3 );
HueImage = cvCreateImage( cvGetSize(Image1),8,1 );
SaturationImage = cvCreateImage( cvGetSize(Image1),8,1 );
ValueImage = cvCreateImage( cvGetSize(Image1),8,1);
ImageArray[0]=HueImage;
ImageArray[1]=SaturationImage;
ImageArray[2]=ValueImage;
BackProjectImage = cvCreateImage( cvGetSize(Image1),8,3 );
Histogram1 = cvCreateHist(3,HistogramBins,CV_HIST_SPARSE,HistogramRange);
cvCvtColor( Image1, HSV, CV_BGR2HSV );
cvSplit(HSV,HueImage,SaturationImage,ValueImage,0);
cvCalcHist( ImageArray, Histogram1);
cvNamedWindow("Riverbank",1 );
cvCreateTrackbar("Hue Thresh","Riverbank",&HueValue,200,onTrackbar);
cvShowImage("Riverbank",Image1);
cvWaitKey(0);
return 0;
}
void onTrackbar(int position)
{
CvHistogram *Histogram2= cvCreateHist(3,HistogramBins,CV_HIST_SPARSE,HistogramRange);
IplImage *Image2=cvCreateImage( cvGetSize(Image1),8,3 );
IplImage *BackProjectImage = cvCreateImage( cvGetSize(Image1),8,1 );
cvCopyHist(Histogram1,&Histogram2);
cvThreshHist(Histogram2,position);
cvCalcBackProject( ImageArray, BackProjectImage, Histogram2);
cvCopy(Image1,Image2,BackProjectImage);
cvShowImage("Riverbank",Image2);
}