您的位置:首页 > 运维架构

【转】OpenCV图像处理 图像的点运算 ( 灰度直方图 )

2013-02-03 15:54 489 查看
[code]intmain()

{

Matimg=imread("lena.jpg",CV_LOAD_IMAGE_GRAYSCALE);


Mat*arrays=&img;

intnarrays=1;

intchannels[]={0};

InputArraymask=noArray();

Mathist;

intdims=1;

inthistSize[]={256};

floathranges[]={0.0,255.0};

constfloat*ranges[]={hranges};

//调用calcHist计算直方图,结果存放在hist中

calcHist(arrays,narrays,channels,mask,hist,dims,histSize,ranges);


//调用一个我自己写的简单的函数用于获取一张显示直方图数据的图片,

//输入参数为直方图数据hist和期望得到的图片的尺寸

MathistImg=ggicci::getHistogram1DImage(hist,Size(600,420));

imshow("lenagrayimagehistogram",histImg);

waitKey();

}


Matggicci::getHistogram1DImage(constMat&hist,SizeimgSize)

{

MathistImg(imgSize,CV_8UC3);

intPadding=10;

intW=imgSize.width-2*Padding;

intH=imgSize.height-2*Padding;

double_max;

minMaxLoc(hist,NULL,&_max);

doublePer=(double)H/_max;

constPointOrig(Padding,imgSize.height-Padding);

intbin=W/(hist.rows+2);


//画方柱

for(inti=1;i<=hist.rows;i++)

{

PointpBottom(Orig.x+i*bin,Orig.y);

PointpTop(pBottom.x,pBottom.y-Per*hist.at<float>(i-1));

line(histImg,pBottom,pTop,Scalar(255,0,0),bin);

}


//画3条红线标明区域

line(histImg,Point(Orig.x+bin,Orig.y-H),Point(Orig.x+hist.rows*bin,Orig.y-H),Scalar(0,0,255),1);

line(histImg,Point(Orig.x+bin,Orig.y),Point(Orig.x+bin,Orig.y-H),Scalar(0,0,255),1);

line(histImg,Point(Orig.x+hist.rows*bin,Orig.y),Point(Orig.x+hist.rows*bin,Orig.y-H),Scalar(0,0,255),1);

drawArrow(histImg,Orig,Orig+Point(W,0),10,30,Scalar::all(0),2);

drawArrow(histImg,Orig,Orig-Point(0,H),10,30,Scalar::all(0),2);


returnhistImg;

}

[/code]
[/code]
[/quote]

Result:
















End:


Author:Ggicci

欢迎阅读,如有错误,希望指正!

--OpenCV初学者

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐
章节导航