cv::calcHist 示例
时间: 2023-06-22 09:48:30 浏览: 82
以下是一个简单的示例代码,演示如何使用cv::calcHist函数计算一副图像的灰度直方图:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 读取图像
Mat img = imread("lena.jpg", IMREAD_GRAYSCALE);
// 定义直方图参数
int histSize = 256; // 直方图大小
float range[] = { 0, 256 }; // 像素值范围
const float* histRange = { range };
bool uniform = true; // 直方图是否均匀
bool accumulate = false; // 直方图是否累积
// 计算直方图
Mat hist;
calcHist(&img, 1, 0, Mat(), hist, 1, &histSize, &histRange, uniform, accumulate);
// 在窗口中显示直方图
int histWidth = 512, histHeight = 400;
int binWidth = cvRound((double)histWidth / histSize);
Mat histImage(histHeight, histWidth, CV_8UC1, Scalar(0));
normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());
for (int i = 1; i < histSize; i++)
{
line(histImage, Point(binWidth * (i - 1), histHeight - cvRound(hist.at<float>(i - 1))),
Point(binWidth * (i), histHeight - cvRound(hist.at<float>(i))),
Scalar(255), 2, LINE_AA);
}
imshow("Histogram", histImage);
waitKey(0);
return 0;
}
```
在这个示例中,我们首先读取了一幅灰度图像(lena.jpg),然后定义了直方图计算所需的参数,包括直方图大小,像素值范围,直方图是否均匀以及是否累积等。接着,我们使用cv::calcHist函数计算了图像的灰度直方图。最后,我们将计算得到的直方图绘制在一个窗口中显示出来。
阅读全文