https://www.douban.com/note/545836966/
#define cvQueryHistValue_1D( hist, idx0 ) \
((float)cvGetReal1D( (hist)->bins, (idx0)))或者:
#include <opencv2/legacy/compat.hpp>
------- 第一個 OPENCV 程序,不要笑話我是菜鳥呀,以前以爲不會用到opencv呢 ------------------
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
if ( argc != 2 )
{
printf("usage: DisplayImage.out <Image_Path>\n");
return -1;
}
Mat image;
image = imread( argv[1], 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}
------------------------------------------------------------------------------------------------------
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
------------------------------------ second ------------------------------
#include "opencv2/opencv.hpp"
#define cvQueryHistValue_1D( hist, idx0 ) ((float)cvGetReal1D( (hist)->bins, (idx0)))
int main()
{
IplImage* src= cvLoadImage("./woman.jpg");
IplImage* gray_dst= cvCreateImage(cvGetSize(src), 8, 1);
cvCvtColor(src, gray_dst, CV_BGR2GRAY);
//一維維數
int dims= 1;
//直方圖的尺寸
int size= 256;
//直方圖的高度
int height = 256;
//灰度圖的範圍0到255
float range[]= {0, 256};
float *ranges[]= {range};
//創建一維直方圖
CvHistogram* hist;
hist= cvCreateHist(dims, &size, CV_HIST_ARRAY, ranges, 1);
//計算灰度圖的一維直方圖
cvCalcHist(&gray_dst, hist, 0, 0);
//歸一化直方圖
cvNormalizeHist(hist, 1.0);
int scale= 2;
//創建圖像,用於顯示直方圖
IplImage* hist_img= cvCreateImage(cvSize(size* scale, height), 8, 3);
//圖像置零
cvZero(hist_img);
//計算直方圖的最大方塊值,初始化爲0
float max_value= 0;
cvGetMinMaxHistValue(hist, 0, &max_value, 0, 0);
//繪製直方圖
for(int i=0; i<size; i++)
{
float bin_val= cvQueryHistValue_1D(hist, i); //像素i的概率
int intensity = cvRound(bin_val* height/ max_value); // 繪製的高度
cvRectangle(hist_img, cvPoint(i* scale, height- 1),
cvPoint((i+1)* scale- 1, height- intensity), RGB(255, 255, 255));
}
cvNamedWindow("gray");
cvShowImage("gray", gray_dst);
cvNamedWindow("Histogram");
cvShowImage("Histogram", hist_img);
cvWaitKey(0);
cvReleaseImage(&src);
cvReleaseImage(&gray_dst);
cvReleaseImage(&hist_img);
cvDestroyWindow("gray");
cvDestroyWindow("Histogram");
}