單通道映像的長條圖(C/C++原始碼)

來源:互聯網
上載者:User

計算並繪製單通道映像的長條圖。在MATLAB中繪製長條圖是一件非常簡單的事情,可是到了C環境下,竟然變成了一個問題。各種實現方法都有,而且要自己動手重新編程。幸好有了OPENCV。下面的代碼要求OPENCV4.0的支援,並在VC6中編譯通過。

轉自阿須數位

//
// 對單通道映像做長條圖
//

#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <ctype.h>

int main( int argc, char** argv )
{
    IplImage *src = 0;
    IplImage *histimg = 0;
    CvHistogram *hist = 0;
   
    int hdims = 50;     // 劃分HIST的個數,越高越精確
    float hranges_arr[] = {0,255};
    float* hranges = hranges_arr;
    int bin_w; 
    float max_val;
    int i;
   
    if( argc != 2 || (src=cvLoadImage(argv[1], 0)) == NULL)  // force to gray image
        return -1;
   
    cvNamedWindow( "Histogram", 1 );
    hist = cvCreateHist( 1, &hdims, CV_HIST_ARRAY, &hranges, 1 );  // 計算長條圖
    histimg = cvCreateImage( cvSize(320,200), 8, 3 );

    cvZero( histimg );
   
    cvCalcHist( &src, hist, 0, 0 ); // 計算長條圖
    cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 );  // 只找最大值
    cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0., 0 ); // 縮放 bin 到區間 [0,255]
   
    cvZero( histimg );
    bin_w = histimg->width / hdims;  // hdims: 條的個數,則 bin_w 為條的寬度
   
    // 畫長條圖
    for( i = 0; i < hdims; i++ )
    {
        double val = ( cvGetReal1D(hist->bins,i)*histimg->height/255 );
        CvScalar color = CV_RGB(255,255,0); //(hsv2rgb(i*180.f/hdims);
        cvRectangle( histimg, cvPoint(i*bin_w,histimg->height),
            cvPoint((i+1)*bin_w,(int)(histimg->height - val)),
            color, 1, 8, 0 );
    }
   
    cvShowImage( "Histogram", histimg );
    cvWaitKey(0);

    cvDestroyWindow("Histogram");
    cvReleaseImage( &src );
    cvReleaseImage( &histimg );
    cvReleaseHist ( &hist );
   
    return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.