opencv histogram

 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");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章