OpenCV中二维直方图

不管计算几维的直方图,用的都是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表示直方图在配置阶段会被清零

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值