void HistMatch(IplImage *histimg,double histv[])
{
int bins = 256;
int sizes[] = {bins};
CvHistogram *hist = cvCreateHist(1,sizes,CV_HIST_ARRAY);
cvCalcHist(&histimg,hist);
cvNormalizeHist(hist,1);//函数 cvNormalizeHist 通过缩放来归一化直方块,使得所有块的和等于 factor.
double val_1 = 0.0;
double val_2 = 0.0;
uchar T[256] = {0};
double S[256] = {0};
double G[256] = {0};
for (int index = 0; index<256; ++index)
{
val_1 += cvQueryHistValue_1D(hist,index);
val_2 += histv[index];
G[index] = val_2;
S[index] = val_1;
}
double min_val = 0.0;
int PG = 0;
for ( int i = 0; i<256; ++i)
{
min_val = 1.0;
for(int j = 0;j<256; ++j)
{
if( (G[j] - S[i]) < min_val && (G[j] - S[i]) >= 0)
{
min_val = (G[j] - S[i]);
PG = j;
}
}
T[i] = (uchar)PG;
}
uchar *p = NULL;
for (int x = 0; x<histimg->height;++x)
{
p = (uchar*)(histimg->imageData + histimg->widthStep*x);
for (int y = 0; y<histimg->width;++y)
{
p[y] = T[p[y]];
}
}
}
图片直方图匹配的程序,哪位大虾给解释下,用的什么原理进行的匹配?
尤其是这一段
uchar *p = NULL;
for (int x = 0; x<histimg->height;++x)
{
p = (uchar*)(histimg->imageData + histimg->widthStep*x);
for (int y = 0; y<histimg->width;++y)
{
p[y] = T[p[y]];
}
}
opencv 直方图匹配的程序
最新推荐文章于 2025-10-15 09:37:40 发布
本文详细解析了C++程序中HistMatch函数,用于图像直方图匹配的过程。通过计算两个直方图的差值比例,将源图像的像素映射到目标直方图上,实现了色彩空间的调整。重点讲解了关键代码段,如直方图计算、归一化及像素值的映射操作。

1644

被折叠的 条评论
为什么被折叠?



