【opencv练习28 - 直方图计算】

来源:互联网 发布:徐达 知乎 编辑:程序博客网 时间:2024/05/18 16:13
/*******************************************************    测试程序 【直方图计算】    时间:2016年8月31日    函数:equalizeHist    //【计算直方图】 Compute the histograms:    //参数:src,源数组个数,每个通道(1 dim = 0),Mat(),            每个bin尺寸归一化,直方图初始化清零    calcHist( &bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate );    //【归一化输出结果】     //参数:src,dst,0,histImage.rows(归一化上下限),?,?    normalize(b_hist, b_hist, 0,     histImage.rows, NORM_MINMAX, -1, Mat() );********************************************************/int main(void){    Mat src, dst;    src = imread("YY01.jpg", 1 );    //【BRG——通道分离】     vector<Mat> bgr_planes;    split( src, bgr_planes );    int histSize = 256;                         //【256条】    float range[] = { 0, 256 } ;    //【设置范围(一维数组0,256)】    const float* histRange = { range };          //【常量指针 float*(范围指针)】    bool uniform = true;     bool accumulate = false;    Mat b_hist, g_hist, r_hist;             //灰度矩阵*3    //【计算直方图】     calcHist( &bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate );    calcHist( &bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate );    calcHist( &bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate );    //【绘制直方图BGR】     int hist_w = 512;       //宽    int hist_h = 400;       //高    int bin_w = cvRound( (double) hist_w/histSize );    //bin宽度    Mat histImage( hist_h, hist_w, CV_8UC3, Scalar( 0,0,0) );       //初始化Mat histImage(x,y,CV_8UC3, ~ )    //【归一化输出结果】     //参数:src,dst,0,histImage.rows(归一化上下限),?,?    normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );    normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );    normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );    //【绘制每一个通道】 Draw for each channel    for( int i = 1; i < histSize; i++ )    {        line( histImage, Point( bin_w*(i-1), hist_h - cvRound(b_hist.at<float>(i-1)) ) ,                        Point( bin_w*(i), hist_h - cvRound(b_hist.at<float>(i)) ),                        Scalar( 255, 0, 0), 2, 8, 0  );        line( histImage, Point( bin_w*(i-1), hist_h - cvRound(g_hist.at<float>(i-1)) ) ,                        Point( bin_w*(i), hist_h - cvRound(g_hist.at<float>(i)) ),                        Scalar( 0, 255, 0), 2, 8, 0  );        line( histImage, Point( bin_w*(i-1), hist_h - cvRound(r_hist.at<float>(i-1)) ) ,                        Point( bin_w*(i), hist_h - cvRound(r_hist.at<float>(i)) ),                        Scalar( 0, 0, 255), 2, 8, 0  );    }    imshow("YY01", src );    imshow("calcHist Demo", histImage );    waitKey(0);    return 0;}

这里写图片描述

0 0
原创粉丝点击