C++实现直⽅图均衡,附源代码⽬录
接⼝设计
//直⽅图均衡化函数定义7个月宝宝辅食
国债逆回购如何操作static BOOL histeq(CImageDatat &imgIn, CImageDatat &imgOut);
运⾏结果
源代码
//计算直⽅图函数
void CImageProcessingEx::getHist(const CImageDatat& img,int band,std::vector<int>& hist)
{
int value;
牛肉煎包int N_row = img.m_ysize;
int N_col = img.m_xsize;
const double* imgData = img.m_data;
for(int row=0; row<N_row;++row)//对图像逐⾏逐列进⾏扫描,计算完成直⽅图
{
for(int col=0; col<N_col;++col)
{
int index = band * N_row * N_col + row * N_col + col;
value=(UINT8)imgData[index];
hist[value]++;
}
}
}
//直⽅图均衡
BOOL CImageProcessingEx::histeq(CImageDatat &imgIn, CImageDatat &imgOut)
梯形是四边形吗{
const int LEVEL =256;//灰度值级数
int k, row, col;//⽤于循环
int k, row, col;//⽤于循环
//double hist[LEVEL], accuHist[LEVEL]; //直⽅图和累积直⽅图
std::vector<int>hist(LEVEL);
非化脓性中耳炎std::vector<double>accuHist(LEVEL);
山东财经大学排名
/* 确保输⼊图像⾮空 */
pty())
{
return FALSE;
蛋糕的做法大全
}
//记录输⼊图像的尺⼨
init(imgIn);
/*创建输⼊图像*/
if(FALSE == ate(n_col,n_row,n_band))
{
return FALSE;
}
//输⼊和输出图像的数据区指针
const double*input_data=imgIn.m_data;
double*output_data = imgOut.m_data;
int img_area = n_col * n_row;//⾯积,即单个波段的像素个数
for(int band =0; band < n_band; band++)
{/* 步骤 1:计算输⼊图像的直⽅图 */
getHist(imgIn, band,hist);
/* 步骤 2:计算累积直⽅图 */
accuHist[0]= hist[0]/ img_area;
for(k =1; k < LEVEL -1; k++)//对直⽅图索引进⾏扫描,计算完成累积直⽅图
{
accuHist[k]= accuHist[k -1]+double(hist[k])/ img_area;
}
accuHist[255]=1;
/* 步骤 3:根据⽤累积直⽅图建⽴灰度变换函数,并逐⾏逐列进⾏像素的灰度变换 */ int index, gray_value;
for(row =0; row < n_row;++row)
{
for(col =0; col < n_col;++col)
{
index =coo2ind(band,row,col);
gray_value =(int)input_data[index];
output_data[index]=(LEVEL -1)* accuHist[gray_value];//灰度变换
}
}
}
准是什么结构的字
return TRUE;
}