#include
#include
#include
int main()
{
//TODO:Add your command handler code here
IplImage *img=NULL;
int hist_size = 255; //直方圖的計數
float range_0[] = {0,256}; //第0維陣列的變化範圍
float * ranges[] = {range_0};//第1維陣列的變化範圍
int i,bin_w; //下稱號
float max_value = 0 , min_value = 0;//直方圖數值的max和min
int min_idx = 0 , max_idx = 0;//對應上述max和min數值時的下稱號
double mean = 0 , variance = 0;//用於存放平均值(mean)和變化量(variance)的變化
IplImage *pImage=NULL; //聲明IplImage變量
IplImage *pImgGray=NULL;//聲明IplImage變量
//將已讀入系統的圖像複製一份
img=cvLoadImage("lena.jpg");
pImage = img;
//建立和原始圖像一樣的圖像內存區,圖像元素的位深度設為IPL_DEPTH_8U
pImgGray = cvCreateImage(cvSize(pImage->width,pImage->height),IPL_DEPTH_8U,1);
//轉換成灰度圖像
cvCvtColor(pImage,pImgGray,CV_BGR2GRAY);
//創建一個矩形區域
CvRect rect = cvRect(0,0,500,600);
//把矩形作用於圖像以建立一個感興趣區(region of interest,ROI)
cvSetImageROI(pImgGray, rect); //設置ROI
//創建一個圖像用來存放直方圖
IplImage * histImage = cvCreateImage(cvSize(320,200),8,1);
//創建一個指定尺寸的直方圖,用於存放從圖像獲得的信息
CvHistogram * hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);
//計算直方圖並作用到hist變量
cvCalcHist(&pImgGray,hist,0,NULL);
//得到直方圖中的最大最小值及其稱號
cvGetMinMaxHistValue(hist,&min_value,&max_value,&min_idx,&max_idx);
//縮放這些最大最小值以內容入圖像內
cvScale(hist->bins,hist->bins,((double)histImage->height)/max_value,0);
//設所有直方圖的數值為255
cvSet(histImage,cvScalarAll(255),0);
//建立一個比例因子以沿寬度縮放
bin_w = cvRound((double)histImage->width/hist_size);
for(i=0;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];
//std::cout<
//均值計算完畢
mean /=hist_size;
//有了數值後就可以計算變化量了(variance)
for(i=0;i
variance += pow((bins[0]-mean),2);
}
//變化量計算完畢
variance /=hist_size;
//std::cout<<"Histogram Mean: "<
cvNamedWindow("Original",0); //命名
cvShowImage("Original",pImage); //顯示
cvNamedWindow("Gray",0); //命名
cvShowImage("Gray",pImgGray); //顯示
cvNamedWindow("Histogram",0); //命名
cvShowImage("Histogram",histImage); //顯示
CvFont * pfont = new CvFont;
cvInitFont(pfont,CV_FONT_HERSHEY_SIMPLEX,0.8f,0.8f,0,2);
// CString Result= "Histogram Mean: ";
// CString str;
// str.Format("%f",mean);
// Result +=str + "\n";
// cvPutText(histImage,Result,cvPoint(80,80),pfont,CV_RGB(255 ,0,0));
delete pfont;
//等待按鍵
cvWaitKey(0);
//將程序開始定義的變量釋放
cvReleaseImage(&histImage);
cvReleaseImage(&pImgGray);
//銷毀窗口
cvDestroyWindow("Original");
cvDestroyWindow("Gray");
cvDestroyWindow("Histogram");
}
/*
int main()
{
CMainFrame CM;
OnHistorgram();
}
*/
問題是很簡單的一句...
不知道為什麼不能RUN
pImage = img;
回覆刪除到這行的時候有讀進去
但是下一行之後就讀不到了
跟其他人討論過後還是無解