OpenCV2灰度直方图

     本人博客地址:http://blog.youkuaiyun.com/wanrenwangxuejing

    opencv2.0以后c++接口的API函数成为一种趋势,常用的IplImage与cvMat数据结构也淡出,新数据结构cv::Mat成为新宠。本文代码是基于新版本接口的图像直方图统计。


//OpenCV2的直方图统计


#include<highgui.h>
#include <cxcore.h>
#include <cv.h>
#include <iostream>
#include <vector>
using namespace cv;
using namespace std;


int main(int argc,char** argv)
{
Mat image = imread("D:/test.jpg");
if(!image.data){
cout<<"load error"<<endl;
return -1;
}
cvtColor(image,image,CV_BGR2RGB);
vector<Mat>src;
split(image,src);
Mat hist_r,hist_g,hist_b;
int histsize=256;
int channels[1] ={0};
float range[] = { 0, 255 } ;   
const float* ranges[] = { range }; 
double minvalue = 0;
double maxvalue = 0;
calcHist(&src[0],1,0,Mat(),hist_r,1,&histsize,ranges,true,false);  
//calcHist(&src[1],1,0,Mat(),hist_g,1,&histsize,ranges,true,false);
//calcHist(&src[2],1,0,Mat(),hist_b,1,&histsize,ranges,true,false);
//calcHist();
minMaxLoc(hist_r,&minvalue,&maxvalue,0,0);
Mat histgraph(histsize,histsize,CV_8U,Scalar(255));
int hpt=static_cast<int>(0.9*histsize);
for(int i = 0;i<histsize;++i)
{
float val = hist_r.at<float>(i);
int intensity = static_cast<int>(val*hpt/maxvalue);
line(histgraph,Point(i,histsize),Point(i,histsize-intensity),Scalar::all(0),8,0);


     }
cvNamedWindow("ShowWindow",1);
imshow("ShowWindow",histgraph);
cvNamedWindow("R",1);
imshow("R",src[2]);
cvWaitKey(0);
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值