opencv相关问题理解(4)直方图操作!!

分割通道方法:应用split函数
void cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1,
CvArr* dst2, CvArr* dst3 );
等同于cvCvtPixToPlane。
典型直方图求法
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
 IplImage *src=cvLoadImage("./lena.jpg");
 IplImage *hsv=cvCreateImage(cvGetSize(src),src->depth,3);
 cvCvtColor(src,hsv,CV_BGR2HSV);//把原来图像BGR空间转换成HSV空间
 IplImage *dst_h=cvCreateImage(cvGetSize(src),src->depth,1);
 IplImage *dst_s=cvCreateImage(cvGetSize(src),src->depth,1);
 IplImage *dst_v=cvCreateImage(cvGetSize(src),src->depth,1);
 IplImage *planes[]={dst_h,dst_s};
 cvSplit(hsv,dst_h,dst_s,dst_v,NULL);
 int h_bins=30,s_bins=32;

 CvHistogram *Hist_hsv;
 {
  int hist_size[]={h_bins,s_bins};
  float h_ranges[]={0,180};
  float s_ranges[]={0,255};
  float *ranges[]={h_ranges,s_ranges};
  Hist_hsv=cvCreateHist(2,hist_size,CV_HIST_ARRAY,ranges,1);
 }
 cvCalcHist(planes,Hist_hsv,0,0);
 //cvNormalizeHist(hist[i],1.0);
 int scale=10;
 IplImage *hist_img=cvCreateImage(cvSize(h_bins*scale,s_bins*scale),
  8,
  3
  );
 cvZero(hist_img);
 float max_value = 0;
 cvGetMinMaxHistValue( Hist_hsv, 0, &max_value, 0, 0 );
 for( int h = 0; h < h_bins; h++ ) { 

 for( int s = 0; s < s_bins; s++ ) {
  float bin_val = cvQueryHistValue_2D( Hist_hsv, h, s );
  int intensity = cvRound( bin_val * 255 / max_value );
   cvRectangle(
    hist_img,
   cvPoint( h*scale, s*scale ),
   cvPoint( (h+1)*scale - 1, (s+1)*scale - 1),
   CV_RGB(intensity,intensity,intensity),
    CV_FILLED
   );
  }
 }
 cvNamedWindow("./lena.jpg");
 cvShowImage("./lena.jpg",src);
 
 cvNamedWindow("dst");
 cvShowImage("dst",hist_img);

 cvWaitKey();
 cvReleaseImage(&src);
 cvDestroyWindow("./lena.jpg");
 cvReleaseImage(&hist_img);
 cvDestroyWindow("dst");
 
 
 return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值