如何求取图片的颜色直方图

lmlly_117228 2008-10-28 03:40:17

图片不能显示出来
因为要做成DLL
...全文
324 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tankezgh 2009-12-04
  • 打赏
  • 举报
回复
楼上的能不能加我QQ361621495 我像与你详细的讨论 我急需一个人来指导知道我
The_eagles 2008-11-01
  • 打赏
  • 举报
回复

//DrawHist
// 将需要画直方图的数据用vector传入函数,pHist是传出参数。
// 需要包含文件 #include<vector>


int DrawHist(std::vector<float> & vec, BYTE ** &pHist)
{
//统计vec中的每个值出现的次数,
float maxval = *std::max_element(vec.begin(), vec.end());
int len = vec.size();
std::vector<int> Hist(256,0);
int tmp =0;
for(int i=0; i<len; ++i)
{
tmp = 255.0 * vec.at(i) / maxval;
tmp = min(255,tmp);
Hist[tmp]++;
}

// normalize to 255
int vmax = *std::max_element(Hist.begin(), Hist.end());
for(i=0; i<256; ++i)
Hist[i] = (255*Hist[i])/vmax;


// 将直方图写入二维数组,二维数组就是直方图。这里直方图的尺寸是固定的256*256
// 如果需要更大的话,可以自己修改。
BYTE** p = new BYTE*[256];
for(i=0; i<256; i++)
p[i]= new BYTE[256];
for(i=0; i<256; i++)
for(int j=0; j<256; j++)
{
if(i<Hist[j])
p[i][j]=0;
else
p[i][j]=200;
}
for(i=0; i<256; i++)
for(int j=0;j<256; j++ )
pHist[i][j] = p[i][j];

// Free
for(int j=0; j<256; ++j)
delete []p[j];
delete []p;


The_eagles 2008-11-01
  • 打赏
  • 举报
回复

//DrawHist
// 将需要画直方图的数据用vector传入函数,pHist是传出参数。
// 需要包含文件 #include<vector>


int DrawHist(std::vector<float> & vec, BYTE ** &pHist)
{
//统计vec中的每个值出现的次数,
float maxval = *std::max_element(vec.begin(), vec.end());
int len = vec.size();
std::vector<int> Hist(256,0);
int tmp =0;
for(int i=0; i<len; ++i)
{
tmp = 255.0 * vec.at(i) / maxval;
tmp = min(255,tmp);
Hist[tmp]++;
}

// normalize to 255
int vmax = *std::max_element(Hist.begin(), Hist.end());
for(i=0; i<256; ++i)
Hist[i] = (255*Hist[i])/vmax;


// 将直方图写入二维数组,二维数组就是直方图。这里直方图的尺寸是固定的256*256
// 如果需要更大的话,可以自己修改。
BYTE** p = new BYTE*[256];
for(i=0; i<256; i++)
p[i]= new BYTE[256];
for(i=0; i<256; i++)
for(int j=0; j<256; j++)
{
if(i<Hist[j])
p[i][j]=0;
else
p[i][j]=200;
}
for(i=0; i<256; i++)
for(int j=0;j<256; j++ )
pHist[i][j] = p[i][j];

// Free
for(int j=0; j<256; ++j)
delete []p[j];
delete []p;


The_eagles 2008-11-01
  • 打赏
  • 举报
回复

//DrawHist
// 将需要画直方图的数据用vector传入函数,pHist是传出参数。
// 需要包含文件 #include<vector>


int DrawHist(std::vector<float> & vec, BYTE ** &pHist)
{
//统计vec中的每个值出现的次数,
float maxval = *std::max_element(vec.begin(), vec.end());
int len = vec.size();
std::vector<int> Hist(256,0);
int tmp =0;
for(int i=0; i<len; ++i)
{
tmp = 255.0 * vec.at(i) / maxval;
tmp = min(255,tmp);
Hist[tmp]++;
}

// normalize to 255
int vmax = *std::max_element(Hist.begin(), Hist.end());
for(i=0; i<256; ++i)
Hist[i] = (255*Hist[i])/vmax;


// 将直方图写入二维数组,二维数组就是直方图。这里直方图的尺寸是固定的256*256
// 如果需要更大的话,可以自己修改。
BYTE** p = new BYTE*[256];
for(i=0; i<256; i++)
p[i]= new BYTE[256];
for(i=0; i<256; i++)
for(int j=0; j<256; j++)
{
if(i<Hist[j])
p[i][j]=0;
else
p[i][j]=200;
}
for(i=0; i<256; i++)
for(int j=0;j<256; j++ )
pHist[i][j] = p[i][j];

// Free
for(int j=0; j<256; ++j)
delete []p[j];
delete []p;


vc1000 2008-10-30
  • 打赏
  • 举报
回复
灰度直方图就是对像素值的统计,主要针对的是灰度图
「已注销」 2008-10-29
  • 打赏
  • 举报
回复
主要是读取图片的像素,转换成灰度,然后再统计。
vcPlayer 2008-10-28
  • 打赏
  • 举报
回复
一般是对灰度图片求取直方图:统计每一种灰度的像素数,并在以灰度为横坐标、该灰度像素数为纵坐标的方式画出。
一条晚起的虫 2008-10-28
  • 打赏
  • 举报
回复
图片不能显示出来
//加载到memDC就可以了
//看lz,应该求直方图是会的。

19,464

社区成员

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

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