首页 > 精品范文库 > 5号文库
均衡化代码
编辑:枫叶飘零 识别码:14-391877 5号文库 发布时间: 2023-04-12 09:37:55 来源:网络

#include

#include

#include

#include

#include

#include

#include

#include

#define

IMAGE1_PATH

“/home/jacob/图片/1.png“

#define

IMAGE2_PATH

“/home/jacob/图片/2.png“

#define

IMAGE3_PATH

“/home/jacob/图片/3.png“

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]

=

0.0f;

hranges[1]

=

255.0f;

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

=

0.9

*

histSize[0];

//每个条目绘制一条垂直线

for

(int

h

=

0;

h

histSize[0];

h++)

{

//直方图的元素类型为32位浮点数

float

binVal

=

hist.at(h);

int

intensity

=

static_cast(binVal

*

hpt

/

maxVal);

line(histImg,Point(h,histSize[0]),Point(h,histSize[0]

intensity),Scalar::all(0));

}

return

histImg;

}

};

/**

*

@brief

EqualizeImage

对灰度图像进行直方图均衡化

*

@param

src

输入图像

*

@param

dst

均衡化后的图像

*/

void

EqualizeImage(const

Mat

&src,Mat

&dst)

{

Histogram1D

hist1D;

Mat

hist

=

hist1D.getHistogram(src);

hist

/=

(src.rows

*

src.cols);

//

对得到的灰度直方图进行归一化,得到密度(0~1)

float

cdf[256]

=

{0};

//

灰度的累积概率

Mat

lut(1,256,CV_8U);

//

创建用于灰度变换的查找表

for

(int

i

=

0;

i

256;

i++)

{

//

计算灰度级的累积概率

if

(i

==

0)

cdf[i]

=

hist.at(i);

else

cdf[i]

=

cdf[i

1]

+

hist.at(i);

lut.at(i)

=

static_cast(255

*

cdf[i]);

//

创建灰度的查找表

}

LUT(src,lut,dst);

//

应用查找表,进行灰度变化,得到均衡化后的图像

}

均衡化代码
TOP