OpenCV C 代码示例:计算灰度图像直方图并可视化
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 函数绘制直方图并将其可视化展示在窗口中。
原文地址: https://www.cveoy.top/t/topic/lWUn 著作权归作者所有。请勿转载和采集!