图像处理 灰度图像直方图

编程环境:windows下结合opencv.

//计算并获取图像的均匀灰度直方图
//dst表示灰度直方图图像,三通道彩色图像
//nBins表示灰度直方图划分的间隔数
//scalarHistColor表示灰度直方图的颜色
void GrayHist(IplImage* src, IplImage* dst, int nBins, CvScalar scalarHistColor);

void GrayHist(IplImage* src, IplImage* dst, int nBins, CvScalar scalarHistColor)
{
	if (!src || !dst)
	{
		return;
	}
	if (src->nChannels == 3)
	{
		cvCvtColor(src, src, CV_BGR2GRAY);
	}
	//直方图中单个条形图的长度和高度
	int nWidth = dst->width / nBins;
	int nHeight = 0;
	
	int nSizeArray[] = {nBins};
	float fRangeArray[] = {0, 255};
	float* fRange = fRangeArray;
	CvHistogram* pHistGray = cvCreateHist(1, nSizeArray, CV_HIST_ARRAY, &fRange, 1);
	float fMaxVal;//灰度直方图最大值
	double dVal;
	
	cvCalcHist(&src, pHistGray);//计算灰度直方图
	//cvNormalizeHist(pHistGray, 1.0);//归一化直方图
	//cvThreshHist(pHistGray, 0.01);//阈值化直方图,将小于0.01的剔除
	cvGetMinMaxHistValue(pHistGray, NULL, &fMaxVal);//获取直方图最大值
	//画出灰度直方图
	cvZero(dst);//填充底色
	for(int i = 0; i < nBins; i++)
	{
		dVal = cvQueryHistValue_1D(pHistGray, i);
		nHeight = (dVal / fMaxVal) * dst->height;//计算当前条形图的高度
		//绘制直方图
		cvRectangle(dst, cvPoint(nWidth * i, dst->height - nHeight), 
			cvPoint(nWidth * (i + 1), dst->height), scalarHistColor);
	}
	//绘制阈值线
	//nHeight = (0.01 / fMaxVal) * dst->height;//计算阈值线高度
	//cvLine(dst, cvPoint(0, dst->height - nHeight), cvPoint(dst->width, dst->height - nHeight), CV_RGB(255, 0, 0));
	cvReleaseHist(&pHistGray);
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值