// 二维直方图
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=6float s_range[] = { 0,256 };// 256/32=8const 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);}