zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    winfrom 获取当前系统时间
    netcore3.1API+efcore快速搭建
    php
    php
    php
    php-array的相关函数使用
    php-正则表达式
    vim的复制与粘贴
    vim的多窗口和文件切换操作
    laravel教程中出现500问题
  • 原文地址:https://www.cnblogs.com/zxff/p/6443128.html
Copyright © 2011-2022 走看看