您的位置:首页 > 其它

Xcode histogram图像显示测试

2015-07-12 22:59 429 查看
#include <iostream>

#include <cv.h>

#include <highgui.h>

#include <string.h>

int main()
{

int hist_size=255;

float range_0[]={0,256};

float *ranges[]={range_0};

int i,bin_w;

float max_value=0,min_value=0;

int min_idx=0,max_idx=0;

double mean=0,variance=0;

IplImage *pImage=NULL;

IplImage *pImgGray=NULL;

IplImage *img=cvLoadImage("/Users/guofeng/Documents/histogram/test.bmp",1);
pImage=cvCloneImage(img);

cvNamedWindow("original");

cvShowImage("original", pImage);
pImgGray=cvCreateImage(cvGetSize(pImage),
IPL_DEPTH_8U, 1);

cvCvtColor(pImage, pImgGray,
CV_BGR2GRAY);

CvRect rect=cvRect(0,0,512,512);

cvSetImageROI(pImgGray, rect);

IplImage *histImage=cvCreateImage(cvSize(320,320),
8, 1);

CvHistogram *hist=cvCreateHist(1, &hist_size,
CV_HIST_ARRAY,ranges,1);

cvCalcHist(&pImgGray, hist);

cvGetMinMaxHistValue(hist, &min_value, &max_value,&min_idx,&max_idx);

cvScale(hist->bins,hist->bins,((double)histImage->height/max_value),0);

cvSet(histImage,cvScalarAll(255),0);
bin_w=cvRound((double)histImage->width/hist_size);

for(i=0;i<hist_size;i++)
{

cvRectangle(histImage,
cvPoint(i*bin_w,histImage->height),
cvPoint((i+1)*bin_w, histImage->height-cvRound(cvGetReal1D(hist->bins, i))),
cvScalarAll(0),-1,8,0);

float *bins=cvGetHistValue_1D(hist, i);
mean+=bins[0];
}
mean/=hist_size;

for(i=0;i<hist_size;i++)
{

float *bins=cvGetHistValue_1D(hist, i);
variance+=pow((bins[0]-mean),2);
}
variance/=hist_size;

cvNamedWindow("gray");

cvShowImage("gray", pImgGray);

cvNamedWindow("histogram");

cvShowImage("histogram", histImage);

CvFont *pfont=new
CvFont;

cvInitFont(pfont,
CV_FONT_HERSHEY_SIMPLEX, 1,
1,0,0);

char Result[]="histogram mean:";

//Result+=str+"\n";

cvPutText(histImage, Result,
cvPoint(0,80), pfont,
CV_RGB(255,255,0));

cvShowImage("histogram", histImage);

cvSaveImage("/Users/guofeng/Documents/histogram/histogram.jpg", histImage);

cvWaitKey(0);

cvReleaseImage(&pImage);

cvReleaseImage(&pImgGray);

cvReleaseImage(&img);

cvDestroyAllWindows();

return 0;
}
显示直方图:

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