opencv 二维直方图

#define cvCvtPixToPlane cvSplit
#define cvCvtPlaneToPix cvMerge


void hist_2D(void)
{
	IplImage *src=cvLoadImage("lena.jpg");
	IplImage *hsv=cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);
	cvCvtColor(src, hsv, CV_BGR2HSV_FULL);

	IplImage *h_plane=cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
	IplImage *s_plane=cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
	IplImage *v_plane=cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
	IplImage *planes[]={h_plane, s_plane};
	cvCvtPixToPlane(hsv, h_plane, s_plane, v_plane, 0);

	//Build the histogram and compute its contents.
	int h_bins=256, s_bins=256;
	CvHistogram *hist;
	{
		int hist_size[]={h_bins, s_bins};
		float h_ranges[]={0, 255}; //hue is [0, 180]
		float s_ranges[]={0, 255}; 
		float* ranges[]={h_ranges, s_ranges};
		hist=cvCreateHist(2, hist_size, CV_HIST_ARRAY, ranges, 1);
	}
	cvCalcHist(planes, hist, 0, 0); //Compute histogram
	cvNormalizeHist(hist, 1.0); //Normalize it
	//Create an image to use to visualize our histogram
	int scale=2;
	IplImage *hist_img=cvCreateImage(cvSize(h_bins*scale, s_bins*scale), IPL_DEPTH_8U, 3);
	cvZero(hist_img);

	//populate our visualization with little gray squares.
	float max_value=0;
	cvGetMinMaxHistValue(hist, 0, &max_value, 0, 0);
	for (int h=0; h

opencv 二维直方图_第1张图片






你可能感兴趣的:(opencv,opencv,图像处理)