颜色直方图可视化

颜色直方图作为一种全局描述子,在图像检索中有着非常重要的作用,本文实现了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分量:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值