• opencv 小任务3 灰度直方图


    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"  
    #include <iostream>  
    using namespace cv;
    using namespace std;
    
    int main()
    {
        Mat srcImage = imread("F://19.jpg");
        imshow("原图", srcImage);
        if (!srcImage.data) 
        {
        cout << "fail to load image" << endl; 
        return 0; 
        }
    
        MatND dstHist;//得到的直方图     
        int dims = 1;//得到的直方图的维数 灰度图的维数为1
        float hranges[2] = { 0, 255 };
        const float *ranges[1] = { hranges };   // 这里需要为const类型,二维数组用来指出每个区间的范围  
        int size = 256;//直方图横坐标的区间数 即横坐标被分成256份
        int channels = 0;//图像得通道 灰度图的通道数为0
        //计算图像的直方图  
        calcHist(&srcImage, 1, &channels, Mat(), dstHist, dims, &size, ranges);
        int scale = 1;
        Mat dstImage(size * scale, size, CV_8U, Scalar(0));
        //获取最大值和最小值  
        double minValue = 0;
        double maxValue = 0;
        minMaxLoc(dstHist, &minValue, &maxValue, 0, 0); //找到直方图中的最大值和最小值 
        //绘制出直方图  
        int hpt = saturate_cast<int>(0.9 * size);//防止溢出
        for (int i = 0; i < 256; i++)
        {
            float binValue = dstHist.at<float>(i);          
            int realValue = saturate_cast<int>(binValue * hpt / maxValue); 
            line(dstImage, Point(i*scale, size - 1), Point((i + 1)*scale - 1, size - realValue), Scalar(255));
        }
        imshow("一维直方图", dstImage);
        waitKey(0);
        return 0;
    }
  • 相关阅读:
    VI中的批量替换--转载
    Zookeeper集群
    Zookeeper实现Master选举(哨兵机制)
    分布式session之token解决方案实现
    浏览器
    分布式session之redis解决方案实现
    服务器操作常用
    Nginx安装教程(Centos6.8)
    分布式锁(Redis实现)
    开发总结
  • 原文地址:https://www.cnblogs.com/zxff/p/6443128.html
Copyright © 2020-2023  润新知