颜色直方图作为一种全局描述子,在图像检索中有着非常重要的作用,本文实现了rgb分量下的颜色直方图可视化操作。
#include<iostream>
#include"FTImage.h"
using namespace std;
//typedef unsigned char uchar
#define WIDTH 640
#define HEIGHT 480
void setpixelval(FTImage& src,int col,int row,int flag)
{
switch(flag)
{
case 0:
{
for(int i=255;i>255-row;i--)
{
src.pixels[(i*256+col)*3+1]=0;
src.pixels[(i*256+col)*3+2]=0;
}
}
break;
case 1:
{
for(int i=255;i>255-row;i--)
{
src.pixels[(i*256+col)*3]=0;
src.pixels[(i*256+col)*3+2]=0;
}
}
break;
case 2:
{
for(int i=255;i>255-row;i--)
{
src.pixels[(i*256+col)*3]=0;
src.pixels[(i*256+col)*3+1]=0;
}
}
break;
default:
break;
}
}
void Compute_RGBHist(FTImage& Img,FTImage& r,FTImage& g,FTImage& b)
{
long r1[256]={0},g1[256]={0},b1[256]={0};
for(int i=0;i<HEIGHT;i++)
for(int j=0;j<WIDTH;j++)
{
uchar val1=Img.pixels[(i*WIDTH+j)*3];
uchar val2=Img.pixels[(i*WIDTH+j)*3+1];
uchar val3=Img.pixels[(i*WIDTH+j)*3+2];
r1[val1]=r1[val1]+1;
g1[val2]=g1[val2]+1;
b1[val3]=b1[val3]+1;
}
long max=0;
for(int i=0;i<256;i++)
{
if(r1[i]>max) max=r1[i];
if(g1[i]>max) max=g1[i];
if(b1[i]>max) max=b1[i];
}
for(int i=0;i<256;i++)
{
int val1=(int)((1.0*r1[i]*256)/(max));
int val2=(int)((1.0*g1[i]*256)/(max));
int val3=(int)((1.0*b1[i]*256)/(max));
printf("val1=%d,val2=%d,val3=%d\n",val1,val2,val3);
setpixelval(r,i,val1,0);
setpixelval(g,i,val2,1);
setpixelval(b,i,val3,2);
}
}
int main(int argc,char* argv[])
{
FTImage Img;
Img.FTLoadImageRGB("lena.bmp",WIDTH,HEIGHT);
FTImage R,G,B;
R.FTCreateImage(256,256,3);
G.FTCreateImage(256,256,3);
B.FTCreateImage(256,256,3);
printf("start histogram compute\n");
Compute_RGBHist(Img,R,G,B);
printf("end\n");
R.FTSaveImage("r.bmp");
G.FTSaveImage("g.bmp");
B.FTSaveImage("b.bmp");
}
原图:
<img src="https://img-blog.csdn.net/20150515144359762?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTFpFUDIwMTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
r分量:
<img src="https://img-blog.csdn.net/20150515144444206?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTFpFUDIwMTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
g分量:
b分量: