OpenCV C 代码示例:计算灰度图像直方图并可视化

本示例展示使用 OpenCV C 代码计算灰度图像直方图并进行可视化展示。代码中使用 imread 读取图像,calcHist 计算直方图,normalize 归一化直方图,并使用 line 绘制直方图。

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    Mat image = imread('lena.jpg', IMREAD_GRAYSCALE); // 读取灰度图像
    if (image.empty()) // 检查图像是否读取成功
    {
        cout << 'Failed to open image!' << endl;
        return -1;
    }

    // 计算灰度直方图
    int histSize[] = { 256 };
    float range[] = { 0, 256 };
    const float* histRange[] = { range };
    Mat hist;
    calcHist(&image, 1, 0, Mat(), hist, 1, histSize, histRange);

    // 可视化展示灰度直方图
    int hist_w = 512, hist_h = 400;
    int bin_w = cvRound((double)hist_w / histSize[0]);
    Mat histImage(hist_h, hist_w, CV_8UC1, Scalar(0));
    normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());

    for (int i = 1; i < histSize[0]; i++)
    {
        line(histImage, Point(bin_w * (i - 1), hist_h - cvRound(hist.at<float>(i - 1))),
            Point(bin_w * (i), hist_h - cvRound(hist.at<float>(i))), Scalar(255), 2, LINE_AA);
    }

    namedWindow('原图', WINDOW_NORMAL);
    imshow('原图', image);

    namedWindow('灰度直方图', WINDOW_NORMAL);
    imshow('灰度直方图', histImage);

    waitKey(0);
    return 0;
}

其中,使用 imread 函数读取灰度图像,使用 calcHist 函数计算灰度直方图,然后使用 normalize 函数将直方图归一化到可视化的范围内。最后,使用 line 函数绘制直方图并将其可视化展示在窗口中。

OpenCV C 代码示例:计算灰度图像直方图并可视化

原文地址: https://www.cveoy.top/t/topic/lWUn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录