美文网首页
计算绘制图像灰度直方图

计算绘制图像灰度直方图

作者: coolTigers | 来源:发表于2020-04-14 00:55 被阅读0次

OpenCV中分析绘制直方图并没有直接可用的函数,以下是绘制直方图统计的一种实现。
paint_histogram.h:

#ifndef OPENVCV_H
#define  OPENVCV_H
#include <opencv2/opencv.hpp>
class Histogram1D
{
public:
    Histogram1D();
    ~Histogram1D();
    cv::Mat GetHistogram(const cv::Mat& image);
    cv::Mat GetHistogramImage(const cv::Mat& image, int zoom = 1);
    cv::Mat GetImageOfHistogram(const cv::Mat& hist, int zoom);
private:
    int histSize[1];
    float hranges[2];
    const float* ranges[1];
    int channels[1];
};
#endif

paint_histogram.cpp如下所示:

#include "paint_histogram.h"
using namespace cv;
using namespace std;

Histogram1D::Histogram1D()
{
    histSize[0] = 256;
    hranges[0] = 0.0;
    hranges[1] = 256.0;
    ranges[0] = hranges;
    channels[0] = 0;
}

Histogram1D::~Histogram1D()
{
}

Mat
Histogram1D::GetHistogram(const Mat& image)
{
    Mat hist;
    calcHist(&image, 1, channels, Mat(), hist, 1, histSize, ranges);
    return hist;
}

Mat
Histogram1D::GetHistogramImage(const cv::Mat& image, int zoom)
{
    Mat hist = GetHistogram(image);
    return GetImageOfHistogram(hist, zoom);
}
Mat
Histogram1D::GetImageOfHistogram(const cv::Mat& hist, int zoom)
{
    double maxVal = 0;
    double minVal = 0;

    minMaxLoc(hist, &minVal, &maxVal, 0, 0);

    int histSize = hist.rows;
    Mat histImg(histSize * zoom, histSize * zoom, CV_8U, Scalar(255));
    int hpt = static_cast<int>(0.9 * histSize);

    for (int h = 0; h < histSize; ++h) {
        float binVal = hist.at<float>(h);
        if (binVal > 0) {
            int intensity = static_cast<int>(binVal * hpt / maxVal);
            line(histImg, Point(h * zoom, histSize * zoom), Point(h * zoom, (histSize - intensity) * zoom), Scalar(0), zoom);
        }
    }
    return histImg;
}

main函数调用如下:

#include "paint_histogram.h"
using namespace std;
using namespace cv;

int main()
{

    Mat src = imread("flower.png", IMREAD_GRAYSCALE);
    Histogram1D h;
    namedWindow("Histogram");
    imshow("Histogram", h.GetHistogramImage(src));
    
    waitKey(0);
    return 0;
}

执行结果如下:


image.png

内容来自于书籍。

相关文章

  • exp1-空间域图像增强

    图像灰度变换 计算显示图像直方图、直方图均衡化 空间域图像平滑、锐化

  • 【图像处理】直方图均衡与匹配

    灰度直方图 灰度直方图: 图像灰度直方图描述的是图像各个灰度级的统计特性,横坐标表示各级灰度值,纵坐标表示各级灰度...

  • [图像增强][灰度变换]5. 直方图均衡化

    1. 基本原理 灰度直方图,表示图像中不同灰度值所出现的频数,通过坐标轴绘制成直方图用以表示。考虑如下图片: 灰度...

  • 计算绘制图像灰度直方图

    OpenCV中分析绘制直方图并没有直接可用的函数,以下是绘制直方图统计的一种实现。paint_histogram....

  • 图片处理-opencv-6.灰度直方图

    灰度直方图 定义: 灰度直方图(histogram)是灰度级的函数,描述的是图像中每种灰度级像素的个数,反映图像...

  • 三、图像直方图变换和几何变换

    直方图变换 灰度变换 点运算 几何变换 直方图变换 1.灰度直方图 灰度直方图:数字图像中每一灰度级像素出现的频次...

  • OpenCV 直方图处理:直方图均衡和规定化(匹配)

    灰度直方图是图像中像素灰度集的一种统计反应。它能够描述图像中灰度的分布情况,直观地展现出图像中灰度所占多少。直方图...

  • 灰度直方图和均衡化

    目的: 得到原图的灰度直方图 使原图均衡化 得到均衡化图的灰度直方图 什么是灰度直方图: 图像中所有的像素一句像素...

  • 图像的点运算1

    灰度直方图 灰度直方图是一个二维图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出...

  • Computer Vision

    # Computer Vision ### 图像直方图(Image Histiograms) 灰度直方图是对每一阶...

网友评论

      本文标题:计算绘制图像灰度直方图

      本文链接:https://www.haomeiwen.com/subject/gdjamhtx.html