各位大佬,这是我写的直方图均衡,但为什么结果是直方图反向投影?cv_image是Mat定义的单通道灰度图,如果想实验的话随便一张灰度图单通道就行

Saltedefish 2020-09-18 02:18:30
//opencv 拆分像素处理映射
Mat Temp_Image = This->cv_Image;
int Width = Temp_Image.cols;
int Height = Temp_Image.rows;
float HuiDu[256];
float TongJi[256];
memset(&HuiDu, 0, 256);
memset(&TongJi, 0, 256);
//统计图像每个灰度级像素个数

for (int H = 0; H < Height; H++)
{
uchar* ptr = Temp_Image.ptr<uchar>(H);
for (int W = 0; W < Width; W++)
{
int temp = ptr[W];
HuiDu[temp]++;
}
}


//统计图像每个灰度级像素的累积个数
for (int c = 0; c <256; c++)
{
TongJi[c] = HuiDu[c] / Width * Height * 1.0f;//每一个像素点的概率
}

//均衡处理

float Linshi[256];
int nDstGray[256];
memset(&Linshi, 0, 256);
memset(&nDstGray, 0, 256);
for (int a = 0; a < 256; a++)
{
if (a == 0)
{
Linshi[0] = TongJi[0];
}
else
{
Linshi[a] = Linshi[a - 1] + TongJi[a];//每个像素点的累积概率
}
nDstGray[a] = (255.0f * Linshi[a] + 0.5f);
}

//映射

Mat New_Image = Temp_Image;
New_Image.rows = Height;
New_Image.cols = Width;
//uchar* ptr = Temp_Image.ptr<uchar>(Height);
//uchar* N_ptr = New_Image.ptr<uchar>(New_Image.rows);
for (int G = 0; G < New_Image.rows; G++)
{
//uchar* ptr = Temp_Image.ptr<uchar>(G);
uchar* N_ptr = New_Image.ptr<uchar>(G);
for (int K = 0; K < New_Image.cols; K++)
{
int temp = N_ptr[K];
N_ptr[K] = nDstGray[temp];
}
}
imshow("ZhiFangTu",New_Image);
...全文
43 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧