Opencv.calcHist使用方法
2013-05-15 20:45
316 查看
opencv提供了calcHist函数来计算图像直方图。
其中C++的函数原型如下:void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, OutputArray
hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=
false );
void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, SparseMat&
hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=
false );
参数解释:
arrays。输入的图像的指针,可以是多幅图像,所有的图像必须有同样的深度(CV_8U or CV_32F)。同时一副图像可以有多个channes。
narrays。输入的图像的个数。
channels。用来计算直方图的channes的数组。比如输入是2副图像,第一副图像有0,1,2共三个channel,第二幅图像只有0一个channel,
那么输入就一共有4个channes,如果int channels[3] = {3, 2, 0},那么就表示是使用第二副图像的第一个通道和第一副图像的第2和第0个通道来计
算直方图。
mask。掩码。如果mask不为空,那么它必须是一个8位(CV_8U)的数组,并且它的大小的和arrays[i]的大小相同,值为1的点将用来计算
直方图。
hist。计算出来的直方图
dims。计算出来的直方图的维数。
histSize。在每一维上直方图的个数。简单把直方图看作一个一个的竖条的话,就是每一维上竖条的个数。
ranges。用来进行统计的范围。比如
float rang1[] = {0, 20};
float rang2[] = {30, 40};
const float *rangs[] = {rang1, rang2};那么就是对0,20和30,40范围的值进行统计。
uniform。每一个竖条的宽度是否相等。
accumulate。Accumulation flag. If it is set, the histogram is not cleared in the beginning
when it is allocated. This feature enables you to compute a single histogram from several
sets of arrays, or to update the histogram in time. 是否累加。如果为true,在下次计算的时候不会首先清空hist。这个地方我是这样理解的,不知道有没有错,
请高手指点。
一段示例代码:
转自: /article/2635696.html
其中C++的函数原型如下:void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, OutputArray
hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=
false );
void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, SparseMat&
hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=
false );
参数解释:
arrays。输入的图像的指针,可以是多幅图像,所有的图像必须有同样的深度(CV_8U or CV_32F)。同时一副图像可以有多个channes。
narrays。输入的图像的个数。
channels。用来计算直方图的channes的数组。比如输入是2副图像,第一副图像有0,1,2共三个channel,第二幅图像只有0一个channel,
那么输入就一共有4个channes,如果int channels[3] = {3, 2, 0},那么就表示是使用第二副图像的第一个通道和第一副图像的第2和第0个通道来计
算直方图。
mask。掩码。如果mask不为空,那么它必须是一个8位(CV_8U)的数组,并且它的大小的和arrays[i]的大小相同,值为1的点将用来计算
直方图。
hist。计算出来的直方图
dims。计算出来的直方图的维数。
histSize。在每一维上直方图的个数。简单把直方图看作一个一个的竖条的话,就是每一维上竖条的个数。
ranges。用来进行统计的范围。比如
float rang1[] = {0, 20};
float rang2[] = {30, 40};
const float *rangs[] = {rang1, rang2};那么就是对0,20和30,40范围的值进行统计。
uniform。每一个竖条的宽度是否相等。
accumulate。Accumulation flag. If it is set, the histogram is not cleared in the beginning
when it is allocated. This feature enables you to compute a single histogram from several
sets of arrays, or to update the histogram in time. 是否累加。如果为true,在下次计算的时候不会首先清空hist。这个地方我是这样理解的,不知道有没有错,
请高手指点。
一段示例代码:
//生成一幅单通道图像。 cv::Mat image(imageHeight , imageWidth, CV_8U, imageAddress); cv::MatND histogram; //256个,范围是0,255. const int histSize = 256; float range[] = {0, 255}; const float *ranges[] = {range}; const int channels = 0; cv::calcHist(image, 1, &channels, cv::Mat(), histogram, 1, &histSize, &ranges[0], true, false); int row = histogram.rows; int col = histogram.cols; float *h = (float*)histogram.data; double hh[256]; if (h) { for (int i = 0; i < 256; ++i) { hh[i] = h[i]; } }
转自: /article/2635696.html
相关文章推荐
- OPenCV floodfill 泛洪填充的使用方法
- Windows下Python中使用Opencv的配置方法
- OpenCV KNN 之 使用方法
- 使用opencv后 runtime error! R6025-pure virtual function call 的解决方法
- OPENCV下SIFT算法使用方法笔记
- opencv中图像数据使用方法
- OpenCV使用detectMultiScale可能会报错_CrtIsValidHeapPointer的解决方法
- 高版本Opencv内置的videoInput库的使用方法
- OpenCV 机器学习之 支持向量机的使用方法实例
- 【OpenCV】calcHist在直方图中的使用
- OpenCV3.2.0 双目标定+立体匹配(官方自带例子的使用方法)
- MAC平台下Xcode配置使用OpenCV的具体方法
- Qt5下实现摄像头预览及捕获图像方法二(openCV3与Qt5交互使用)
- 一个系统中同时使用VC6.0+OpenCV1.0和VS2010+OpenCV2.4.6.0的方法
- 海康威视采集卡结合opencv使用(两种方法)-转
- 一个系统中同时使用VC6.0+OpenCV1.0和VS2010+OpenCV2.4.6.0的方法
- opencv2 直方图之calchist函数使用
- opencv 常用使用方法
- vs2010使用openCV中的imread读不到图片问题的解决方法
- OpenCV 人脸识别使用 cvLoad()加载分类器报错的解决方法