Qt 5.3 下OpenCV 2.4.11 开发(7)单通道直方图绘制

Qt 5.3 下OpenCV 2.4.11 开发(7)单通道直方图绘制

分类:

函数中主要使用的 calcHist() 函数来统计一个直方图,,直方图统计类的头文件和源文件,头文件代码如下:

#ifndef HISTOGRAM1D_H#define HISTOGRAM1D_H#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/opencv.hpp>using namespace cv;using namespace std;class Histogram1D{public:Histogram1D();MatND getHistogram(const Mat &source);Mat getHistogramImage(const Mat &source);private:int histSize[1]; //直方图项数int channels[1]; //通道数量float histMinMax[2]; //像素最小值最大值const float* ranges[1]; //像素值范围};#endif // HISTOGRAM1D_H

源文件代码如下:#include "histogram1d.h"Histogram1D::Histogram1D(){//1D参数初始化histSize[0] = 256;histMinMax[0] = 0.0;histMinMax[1] = 255.0;ranges[0] = histMinMax;channels[0] = 0;}MatND Histogram1D::getHistogram(const Mat &source){MatND Hist;calcHist(&source, 1, channels, Mat(), Hist, 1, histSize, ranges);return Hist;}Mat Histogram1D::getHistogramImage(const Mat &source){MatND hist = getHistogram(source);//计算直方图double maxVal = 0;double minVal = 0;minMaxLoc(hist, &minVal, &maxVal);//获取最大值和最小值Mat histImg(histSize[0], histSize[0], CV_8U, Scalar(255));//用于显示直方图图像int topPoint = static_cast<int>(0.9*histSize[0]);for ( int i = 0; i < histSize[0]; i ++ ){float binVal = hist.at<float>(i);int intensity = static_cast<int>(binVal*topPoint/maxVal);line(histImg, Point(i, histSize[0]), Point(i, histSize[0]-intensity),Scalar::all(0));}return histImg;}main.cpp 代码段如下:#include <QCoreApplication>#include "histogram1d.h"using namespace cv;using namespace std;int main(){Mat src = imread("lena.jpg",0);Histogram1D Hg;Mat HistImg = Hg.getHistogramImage(src);namedWindow("HistImg", 0);imshow("HistImg", HistImg);waitKey(0);return 0;}

函数介绍:

void calcHist(const Mat* arrays,<span style="white-space:pre"></span>//输入的源图像<span style="white-space:pre"></span>int narrays,<span style="white-space:pre"></span>//计算直方图数量const int* channels,<span style="white-space:pre"></span>//通道数量InputArray mask,<span style="white-space:pre"></span>//掩码 OutputArray hist,<span style="white-space:pre"></span>//返回的直方图int dims,<span style="white-space:pre"></span>//维数const int* histSize,<span style="white-space:pre"></span>//直方图项数const float** ranges,<span style="white-space:pre"></span>//像素值范围 bool uniform = true,<span style="white-space:pre"></span>//bool accumulate = false );//2、MatND 类型是一个通用类,可以操作N维矩阵。他也定义了一维、二维、三维矩阵的 at 方法。

版权声明:本文为博主原创文章,未经博主允许不得转载。

上一篇Qt 5.3 下OpenCV 2.4.11 开发(6)遍历图像和领域操作

顶0踩0

“过去酒逢知已千杯少,现在酒逢千杯知已少”。

Qt 5.3 下OpenCV 2.4.11 开发(7)单通道直方图绘制

相关文章:

你感兴趣的文章:

标签云: