当前位置:   article > 正文

OpenCV中二维直方图_opencv calchist 二维直方图

opencv calchist 二维直方图

不管计算几维的直方图,用的都是calcHist函数。

C++原型: void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=false )
参数详解:
onst Mat* images:输入图像
int nimages:输入图像的个数
const int* channels:通道索引
InputArray mask:掩膜
OutputArray hist:输出的直方图数组
int dims:直方图的维度
const int* histSize:存放每个维度的直方图的数组
const float** ranges: 每一维度数值的取值范围
bool uniform=true::是否对得到的直方图数组进行归一化处理(是否均匀)
bool accumulate=false:在多个图像时,是否累计计算像素值得个数

二维直方图实例:

	//初始化直方图参数
	const int channels[2] = { 0,1 };
	const int histSize[] = { 256,256 };
	float pranges[] = { 0, 256 };
	float pranges1[] = { 0, 256 };
	const float * ranges[] = { pranges,pranges1 };
	Mat hist;
	//计算直方图
	calcHist(&pic_c, //输入的图片
	1, //表示输入一张图片
	channels,//表示使用图片的哪几个通道,{ 0,1 }就表示用通道0和通道1
	Mat(),//不使用掩模
	hist, //得到的直方图结果
	2, //表示二维
	histSize,//表示每个维度的尺寸
	ranges, //表示每个维度的尺寸,{pranges,pranges1}就表示第一个维度是0`255,第二个维度是0~255
	true,//指示直方图是否均匀的标识符, true表示均匀的直方图
	false);//累计标识符, false表示直方图在配置阶段会被清零
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

用了merge将想要使用的两个单通道的图像合成到一个图片上,就是代码里面的pic_c,然后用channels[2] = { 0,1 }表示使用了这个合成图像的0通道和1通道。
效果图(hist直接用imshow就行了):
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/46656
推荐阅读
相关标签
  

闽ICP备14008679号