zoukankan      html  css  js  c++  java
  • OpenCV2:小学篇 图像灰度变换技术-直方图处理

    一.简介

    在一个单通道的灰度图像中,每个像素的值介于0(黑色)~255(白色)之间,灰色图像的直方图有256个条目(或称为容器)

    二.灰度直方图

    图像由像素点构成,灰度直方图用来描述图像中各个灰度级的像素个数(该灰度级像素出现的频率),灰度直方图的横坐标表示灰度级,纵坐标表示图像中该灰度级出现的次数(频率)

    对于灰度图像,其灰度阶256级变换范围为0~256

    void calcHist(

      const Mat* images,

      int nimages,

      const int* channels,

      InputArray mask,

      OutputArray hist,

      int dims,

      const int* histSize,

      const float** ranges,

      bool uniform = true,

      bool accumulate = false)

    #include <opencv2opencv.hpp>
    
    
    int main()
    {
    
        // 图像源获取及判断
        cv::Mat Image,ImageGray;
        Image = cv::imread("a.jpg");
        if (Image.empty())
            return -1;
        cv::imshow("Image", Image);
    
        // 转换为灰度图像
        cv::cvtColor(Image, ImageGray, CV_BGR2GRAY);
    
        // 定义直方图参数
        const int channels[1] = {0};
        const int histSize[1] = {256};
        float pranges[2] = {0, 255};
        const float* ranges[1] = {pranges};
        cv::MatND hist;
    
        // 计算直方图
        cv::calcHist(&ImageGray, 1, channels, cv::Mat(), hist, 1, histSize, ranges);
    
        // 初始化画布参数
        int hist_w = 500;
        int hist_h = 500;
        int nHistSize = 255;
    
        // 区间
        int bin_w = cvRound((double)hist_w / nHistSize);
        cv::Mat histImage(hist_w, hist_h, CV_8UC3, cv::Scalar(0, 0, 0));
    
        // 将直方图归一化
        normalize(hist, hist, 0, histImage.rows, cv::NORM_MINMAX, -1, cv::Mat());
    
        // 在直方图画布上画出直方图
        for (int i = 1; i < nHistSize; i++)
        {
            line(histImage, 
                cv::Point(bin_w * (i - 1),hist_h - cvRound(hist.at<float>(i-1)) ),
                cv::Point(bin_w * (i), hist_h - cvRound(hist.at<float>(i))),
                cv::Scalar(0, 0, 255),
                2,
                8,
                0);
        }
    
        // 显示直方图
        cv::imshow("histImage", histImage);
        cv::waitKey(0);
    
        return 0;
    
    }

    三.H-S直方图

    四.RGB直方图

    五.自定义直方图

    六.灰度直方图均衡

    七.彩色直方图均衡

    八.直方图变换查找

    九.直方图变换累计

    十.直方图匹配

    十一.直方图对比

    十二.直方图反向投影

     

  • 相关阅读:
    mysql5.7.10 源码编译安装记录 (centos6.4)【转】
    bash脚本里su命令执行
    linux服务器登录时慢出现卡顿
    iptables NAT规则【转】
    双机/RAC/Dataguard的区别【转】
    一步一步搭建 oracle 11gR2 rac + dg 之前传 (一)【转】
    一步一步搭建oracle 11gR2 rac+dg之环境准备(二)【转】
    一步一步搭建oracle 11gR2 rac+dg之共享磁盘设置(三)【转】
    一步一步搭建 oracle 11gR2 rac+dg之grid安装(四)【转】
    一步一步搭建oracle 11gR2 rac+dg之database安装(五)【转】
  • 原文地址:https://www.cnblogs.com/k5bg/p/11083380.html
Copyright © 2011-2022 走看看