#include
#include
#include
#include
#include
#include
#include
#define IMAGE1_PATH homejacob图片1png
#define IMAGE2_PATH homejacob图片2png
#define IMAGE3_PATH homejacob图片3png
using namespace std
using namespace cv
class Histogram1D
{
private
int histSize[1] 项数量
float hranges[2] 统计素值值
const float* ranges[1]
int channels[1] 仅计算通道
public
Histogram1D()
{
准备1D直方图参数
histSize[0] 256
hranges[0] 00f
hranges[1] 2550f
ranges[0] hranges
channels[0] 0
}
Mat getHistogram(const Mat &image)
{
Mat hist
计算直方图
calcHist(&image 计算图
1 计算幅图直方图
channels 通道数量
Mat() 掩码
hist 存放直方图
1 1D直方图
histSize 统计灰度数
ranges) 灰度值范围
return hist
}
Mat getHistogramImage(const Mat &image)
{
Mat hist getHistogram(image)
查找值化
double maxVal 0
minMaxLoc(hist NULL &maxVal)
绘制直方图图
Mat histImg(histSize[0] histSize[0] CV_8U Scalar(255))
设置高点值90
double hpt 09 * histSize[0]
条目绘制条垂直线
for (int h 0 h < histSize[0] h++)
{
直方图元素类型32位浮点数
float binVal histat
int intensity static_cast
line(histImg Point(h histSize[0])
Point(h histSize[0] intensity) Scalarall(0))
}
return histImg
}
}
**
* @brief EqualizeImage 灰度图进行直方图均衡化
* @param src 输入图
* @param dst 均衡化图
*
void EqualizeImage(const Mat &src Mat &dst)
{
Histogram1D hist1D
Mat hist hist1DgetHistogram(src)
hist (srcrows * srccols) 灰度直方图进行化密度(0~1)
float cdf[256] {0} 灰度累积概率
Mat lut(1 256 CV_8U) 创建灰度变换查找表
for (int i 0 i < 256 i++)
{
计算灰度级累积概率
if (i 0)
cdf[i] histat
else
cdf[i] cdf[i 1] + histat
lutat
}
LUT(src lut dst) 应查找表进行灰度变化均衡化图
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档