⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demhist.c

📁 opencv 中科院数字图像处理入门教程
💻 C
字号:
#ifdef _CH_#pragma package <opencv>#endif#ifndef _EiC#include "cv.h"#include "highgui.h"#include <stdio.h>#endifchar file_name[] = "baboon.jpg";int _brightness = 100;int _contrast = 100;int hist_size = 64;float range_0[]={0,256};float* ranges[] = { range_0 };IplImage *src_image = 0, *dst_image = 0, *hist_image = 0;CvHistogram *hist;uchar lut[256];CvMat* lut_mat;/* brightness/contrast callback function */void update_brightcont( int arg ){    int brightness = _brightness - 100;    int contrast = _contrast - 100;    int i, bin_w;    float max_value = 0;    /*     * The algorithm is by Werner D. Streidt     * (http://visca.com/ffactory/archives/5-99/msg00021.html)     */    if( contrast > 0 )    {        double delta = 127.*contrast/100;        double a = 255./(255. - delta*2);        double b = a*(brightness - delta);        for( i = 0; i < 256; i++ )        {            int v = cvRound(a*i + b);            if( v < 0 )                v = 0;            if( v > 255 )                v = 255;            lut[i] = (uchar)v;        }    }    else    {        double delta = -128.*contrast/100;        double a = (256.-delta*2)/255.;        double b = a*brightness + delta;        for( i = 0; i < 256; i++ )        {            int v = cvRound(a*i + b);            if( v < 0 )                v = 0;            if( v > 255 )                v = 255;            lut[i] = (uchar)v;        }    }    cvLUT( src_image, dst_image, lut_mat );    cvShowImage( "image", dst_image );    cvCalcHist( &dst_image, hist, 0, NULL );    cvZero( dst_image );    cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 );    cvScale( hist->bins, hist->bins, ((double)hist_image->height)/max_value, 0 );    /*cvNormalizeHist( hist, 1000 );*/    cvSet( hist_image, cvScalarAll(255), 0 );    bin_w = cvRound((double)hist_image->width/hist_size);    for( i = 0; i < hist_size; i++ )        cvRectangle( hist_image, cvPoint(i*bin_w, hist_image->height),                     cvPoint((i+1)*bin_w, hist_image->height - cvRound(cvGetReal1D(hist->bins,i))),                     cvScalarAll(0), -1, 8, 0 );       cvShowImage( "histogram", hist_image );}int main( int argc, char** argv ){    // Load the source image. HighGUI use.    src_image = cvLoadImage( argc == 2 ? argv[1] : file_name, 0 );    if( !src_image )    {        printf("Image was not loaded.\n");        return -1;    }    dst_image = cvCloneImage(src_image);    hist_image = cvCreateImage(cvSize(320,200), 8, 1);    hist = cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1);    lut_mat = cvCreateMatHeader( 1, 256, CV_8UC1 );    cvSetData( lut_mat, lut, 0 );    cvNamedWindow("image", 0);    cvNamedWindow("histogram", 0);    cvCreateTrackbar("brightness", "image", &_brightness, 200, update_brightcont);    cvCreateTrackbar("contrast", "image", &_contrast, 200, update_brightcont);    update_brightcont(0);    cvWaitKey(0);        cvReleaseImage(&src_image);    cvReleaseImage(&dst_image);    cvReleaseHist(&hist);    return 0;}#ifdef _EiCmain(1,"demhist.c");#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -