图像处理之图像直方图

在C++版opencv中简化了对Hist数据结构的复杂性。

微笑直方图计算原理


微笑重要函数

计算直方图函数原型:

//! computes the joint dense histogram for a set of images.
CV_EXPORTS 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 );



微笑结合原理说明:images为输入图像序列;nimages输入图像数;channels一维数组,指明图像的哪些通道被计算(从0开始,为0,1,2,3,4,....的子集);

mask掩码,为空时使用Mat();hist统计数据,维数取决后面的dims;histSize指明bins的个数;ranges指明每一bins范围。

具体参考:http://www.tuicool.com/articles/b2iYzm

归一化:


#include "cv.h"
#include "highgui.h"

using namespace std;
using namespace cv;

int main(int argc,char *argv[])
{
	Mat src,srcGray,hist;

	src=imread("src.jpg");
	cvtColor(src,srcGray,CV_BGR2GRAY);

	int histSize=256,channels=0;
	float range[]={0,255};
	const float *histRange={range};

	calcHist(&srcGray,1,&channels,Mat(),hist,1,&histSize,&histRange,true,false);

	int histHigh=200;
	Mat histImage(histHigh,histSize*5,CV_8UC1,Scalar(0,0,0));
	normalize(hist,hist,0,histHigh,NORM_MINMAX,-1,Mat());

	for (int i=0;i<histSize;i++)
		line(histImage,Point(i*5+1,histHigh-1),Point(i*5+1,cvRound(histHigh-1-hist.at<float>(i))),Scalar::all(255),2);

	imshow("histImage",histImage);
	waitKey(0);
	destroyAllWindows();
	return 0;
}

效果:

 


均衡化后的结果:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值