// 二维直方图
void QuickDemo::two_histogram_demo(Mat &image) {

	Mat hsv, hs_hist;
	cvtColor(image, hsv, COLOR_BGR2HSV);
	int hbins = 30, sbins = 32;
	int hisat_bins[] = { hbins,sbins };
	float h_range[] = { 0,180 }; //180/30=6
	float s_range[] = { 0,256 };// 256/32=8
	const float* hs_ranges[] = { h_range,s_range };
	int hs_channels[] = { 0,1 };
	calcHist(&hsv, 1, hs_channels, Mat(), hs_hist, 2, hisat_bins, hs_ranges,true,false);
	double maxVal = 0;
	minMaxLoc(hs_hist, 0, &maxVal, 0, 0);//归一化
	int scale = 10;
	Mat hist2d_image = Mat::zeros(sbins*scale, hbins*scale, CV_8UC3);//创建空白图像
	for (int h = 0; h < hbins; h++) {
		for (int s = 0; s < sbins; s++)
		{
			float binVal = hs_hist.at<float>(h, s);
			int intensity = cvRound(binVal * 255 / maxVal);
			rectangle(hist2d_image, Point(h*scale, s*scale), Point((h + 1)*scale - 1, (s + 1)*scale - 1), Scalar::all(intensity), -1);

		}
	}
	applyColorMap(hist2d_image, hist2d_image, COLORMAP_JET);
	imshow("H-S Histogram", hist2d_image);


}

C++结合opencv—图像2维直方图初次尝试-LMLPHPC++结合opencv—图像2维直方图初次尝试-LMLPHPC++结合opencv—图像2维直方图初次尝试-LMLPHPC++结合opencv—图像2维直方图初次尝试-LMLPHP
C++结合opencv—图像2维直方图初次尝试-LMLPHP

C++结合opencv—图像2维直方图初次尝试-LMLPHP

03-15 16:56