• C++ Opencv图像直方图


    Mat image = imread("D:/ju.jpg");
        imshow("素材图", image);
        int bins = 256;    //直条为256
        int hist_size[] = { bins };
        float range[] = { 0,256 };
        const float* ranges[] = { range };
    
        MatND redHist, greenHist, blueHist;
        //MAT数据为BGR
        int channels_r[] = { 2 }; //r通道
        calcHist(&image, 1, channels_r, Mat(), redHist, 1, hist_size, ranges, true, false);
        int channels_g[] = { 1 };
        calcHist(&image, 1, channels_g, Mat(), greenHist, 1, hist_size, ranges, true, false);
        int channels_b[] = { 0 };
        calcHist(&image, 1, channels_b, Mat(), blueHist, 1, hist_size, ranges, true, false);
    
        //准备参数绘制三色直方图
        double maxValue_red, maxValue_green, maxValue_blue;
        minMaxLoc(redHist, 0, &maxValue_red, 0, 0);
        minMaxLoc(greenHist, 0, &maxValue_green, 0, 0);
        minMaxLoc(blueHist, 0, &maxValue_blue, 0, 0);
    
        int scale = 1;
        int histHeight = 256;
        //bins * 3 是因为要绘制三个通道,每个通道的像素取值在 0-bins
        Mat histImage = Mat::zeros(histHeight, bins * 3, CV_8UC3);
    
        //开始绘制
        for (int i = 0; i < bins; i++) {
            float binValue_red = redHist.at<float>(i);
            float binValue_green = greenHist.at<float>(i);
            float binValue_blue = blueHist.at<float>(i);
    
            //计算高度时的乘除与下面绘图的 histHeight - intensity 是为了便于显示,否则有的色度很低
            //要绘制的高度
            int intensity_red = cvRound(binValue_red * histHeight / maxValue_red);
            int intensity_green = cvRound(binValue_green * histHeight / maxValue_green);
            int intensity_blue = cvRound(binValue_blue * histHeight / maxValue_blue);
            rectangle(histImage, Point(i * scale, histHeight - 1),
                Point((i + 1) * scale - 1, histHeight - intensity_red),
                Scalar(255, 0, 0));
            rectangle(histImage, Point((i + bins) * scale, histHeight - 1),
                Point((i + bins + 1) * scale - 1, histHeight - intensity_green),
                Scalar(0, 255, 0));
            rectangle(histImage, Point((i + bins * 2) * scale, histHeight - 1),
                Point((i + bins * 2 + 1) * scale - 1, histHeight - intensity_blue),
                Scalar(0, 0, 255));
        }
    
        imshow("图像的 RGB 直方图", histImage);

    效果如下:

  • 相关阅读:
    关于博客园创始人的心路历程,感触很深!
    Django中的ORM相关操作:F查询,Q查询,事物,ORM执行原生SQL
    在Django中运行脚本文件以及打印出SQL语句。
    Django中的跨表查询,多表查询。
    Django中的ORM介绍,字段以及字段的参数。
    9.2安全的 Web API 与 Web API 2.2 个人帐户
    9.1WebApi的身份验证和授权
    3.1创建项目
    2.4使用属性在 ASP.NET Web API 2 路由创建一个 REST API
    2.3属性在 ASP.NET Web API 2 路由
  • 原文地址:https://www.cnblogs.com/zebra-bin/p/13745130.html
Copyright © 2020-2023  润新知