zoukankan      html  css  js  c++  java
  • 单通道图像的直方图(C/C++源代码)

    2004年10月13日 10:27:00

    计算并绘制单通道图像的直方图。在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;
    }



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=134501


  • 相关阅读:
    简单爬虫爬取知乎日报并保存日报网页到本地
    从0开始学爬虫6比价工具开发2之图书信息汇总
    从0开始学爬虫6比价工具开发1之爬取当当、京东的数据
    从0开始学爬虫5之优雅的使用字符串
    从0开始学爬虫4之requests基础知识
    从0开始学爬虫3之xpath的介绍和使用
    从0开始学爬虫2之json的介绍和使用
    从0开始学爬虫1之环境搭建篇
    jenkins结合supervisor进行python程序发布后的自动重启
    ansible常用的方法小结
  • 原文地址:https://www.cnblogs.com/feisky/p/1586547.html
Copyright © 2011-2022 走看看