opencv 彩色图像直方图

 
 
#include <opencv2/opencv.hpp>
#include "cv.h"
int main()
{
	IplImage *src=cvLoadImage("e:\\kankan\\baihe.jpg");
    IplImage *r=cvCreateImage(cvGetSize(src), 8, 1);
	IplImage *b=cvCreateImage(cvGetSize(src), 8, 1);
	IplImage *g=cvCreateImage(cvGetSize(src), 8, 1);
	cvSplit(src,b, g, r, NULL);
	IplImage *gray=cvCreateImage(cvGetSize(src),8,1);
	cvCvtColor(src,gray,CV_BGR2GRAY);
	int size=256;
	float range[]={0,255};
	float *ranges[]={range};
	CvHistogram *r_hist=cvCreateHist(1, &size, CV_HIST_ARRAY, ranges,1);
	CvHistogram *g_hist=cvCreateHist(1, &size, CV_HIST_ARRAY, ranges,1);
	CvHistogram *b_hist=cvCreateHist(1, &size, CV_HIST_ARRAY, ranges,1);
	CvHistogram *hist=cvCreateHist(1, &size, CV_HIST_ARRAY, ranges,1);
	cvCalcHist(&r, r_hist, 0, NULL);
	IplImage *r_dst=cvCreateImage(cvSize(400,300),8,3);
	cvSet(r_dst,cvScalarAll(255),0);
	float r_max=0;
	cvGetMinMaxHistValue(r_hist, NULL, &r_max, NULL, NULL);
	double r_bin_width=(double)r_dst->width/size;
	double r_bin_unith=(double)r_dst->height/r_max;
	for (int i=0; i<size; i++)
	{
		CvPoint p0=cvPoint(i*r_bin_width,r_dst->height);
		CvPoint p1=cvPoint((i+1)*r_bin_width,r_dst->height-cvGetReal1D(r_hist->bins,i)*r_bin_unith);  
		cvRectangle(r_dst, p0, p1, cvScalar(255,0,0),-1,8,0);
	}
	cvCalcHist(&g, g_hist, 0, NULL);
	IplImage* g_dst=cvCreateImage(cvSize(400,300),8,3);  
   cvSet(g_dst,cvScalarAll(255),0);  
    float g_max=0;  
    cvGetMinMaxHistValue(g_hist,NULL,&g_max,NULL,NULL);  
    double g_bin_width=(double)g_dst->width/size;  
    double g_bin_unith=(double)g_dst->height/g_max;  
    for(int i=0;i<size;i++)  
    {  
        CvPoint p0=cvPoint(i*g_bin_width,g_dst->height);  
       CvPoint p1=cvPoint((i+1)*g_bin_width,g_dst->height-cvGetReal1D(g_hist->bins,i)*g_bin_unith);  
        cvRectangle(g_dst,p0,p1,cvScalar(0,255,0),-1,8,0);  
    }  
    cvCalcHist(&b,b_hist,0,NULL); 

   IplImage* b_dst=cvCreateImage(cvSize(400,300),8,3);  
    cvSet(b_dst,cvScalarAll(255),0);  
    float b_max=0;  
    cvGetMinMaxHistValue(b_hist,NULL,&b_max,NULL,NULL);  
    double b_bin_width=(double)b_dst->width/size;  
    double b_bin_unith=(double)b_dst->height/b_max;  
   for(int i=0;i<size;i++)  
    {  
        CvPoint p0=cvPoint(i*b_bin_width,b_dst->height);  
        CvPoint p1=cvPoint((i+1)*b_bin_width,b_dst->height-cvGetReal1D(b_hist->bins,i)*b_bin_unith);  
       cvRectangle(b_dst,p0,p1,cvScalar(0,0,255),-1,8,0);  
    }  
    cvCalcHist(&gray,hist,0,NULL);  
    IplImage* gray_dst=cvCreateImage(cvSize(400,300),8,3);  
    cvSet(gray_dst,cvScalarAll(255),0);  
    float max=0;  
    cvGetMinMaxHistValue(hist,NULL,&max,NULL,NULL);  
    double bin_width=(double)gray_dst->width/size;  
    double bin_unith=(double)gray_dst->height/max;  
    for(int i=0;i<size;i++)  
    {  
        CvPoint p0=cvPoint(i*bin_width,gray_dst->height);  
        CvPoint p1=cvPoint((i+1)*bin_width,gray_dst->height-cvGetReal1D(hist->bins,i)*bin_unith);  
       cvRectangle(gray_dst,p0,p1,cvScalar(0),-1,8,0);  
   }  

	cvNamedWindow("r");
	cvShowImage("r",r_dst);
	cvNamedWindow("g");
	cvShowImage("g",g_dst);
	cvNamedWindow("b");
	cvShowImage("b",b_dst);
	cvNamedWindow("gray");
	cvShowImage("gray",gray_dst);
	cvReleaseImage(&r_dst);  
    cvReleaseImage(&g_dst);  
    cvReleaseImage(&b_dst);  
    cvReleaseImage(&gray_dst);  
	cvWaitKey(0);
	return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值