数字图像的直方图均衡化(C/C++源代码)

简介:

数字图像的直方图均衡化是常用的图像增强方法,因为均衡化是自动完成的,无需人工干预,而且常常得到比较满意的结果。下面的程序是利用OPENCV提供的函数,实现这个功能。需要OPENCVB4.0的支持,在VC6下编译通过。

//
// perform histgram equalization for single channel image
// AssureDigit Sample code
//


#include "cv.h"
#include "highgui.h"

#defineHDIM   256    // bin ofHIST, default = 256

int main( int argc, char** argv )
{
    IplImage*src = 0, *dst = 0;
    CvHistogram*hist = 0;
   
    int n =HDIM;    
    doublenn[HDIM];
    ucharT[HDIM];
    CvMat*T_mat;
   
    int x;
    int sum = 0;// sum of pixels of the source image 图像中象素点的总和
    double val =0;
   
    if( argc !=2 || (src=cvLoadImage(argv[1], 0)) == NULL)  //force to gray image
       return -1;
   
   cvNamedWindow( "source", 1 );
   cvNamedWindow( "result", 1 );
   
    // calculatehistgram 计算直方图
    hist =cvCreateHist( 1, &n, CV_HIST_ARRAY, 0, 1); 
    cvCalcHist(&src, hist, 0, 0 );
   
    // CreateAccumulative Distribute Function of histgram
    val =0;
    for ( x = 0;x < n; x++)
    {
       val = val + cvGetReal1D (hist->bins, x);
       nn[x] = val;
    }

    //Compute intensity transformation 计算变换函数的离散形式
    sum =src->height * src->width;
    for( x = 0;x < n; x++ )
    {
       T[x] = (uchar) (255 * nn[x] / sum); // range is [0,255]
    }

    // Dointensity transform for source image
    dst =cvCloneImage( src );
    T_mat =cvCreateMatHeader( 1, 256, CV_8UC1 );
    cvSetData(T_mat, T, 0);   
    // directlyuse look-up-table function 直接调用内部函数完成 look-up-table的过程
    cvLUT( src,dst, T_mat );

   cvShowImage( "source", src );
    cvShowImage("result", dst );
   cvWaitKey(0);

   cvDestroyWindow("source");
   cvDestroyWindow("result");
   cvReleaseImage( &src );
   cvReleaseImage( &dst );
   cvReleaseHist ( &hist );
   
    return0;
}

 

本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2008/04/11/1586546.html,如需转载请自行联系原作者


相关文章
|
5月前
|
算法 安全 编译器
LabVIEW使用边缘检测技术实现彩色图像隐写术
LabVIEW使用边缘检测技术实现彩色图像隐写术
48 0
|
5月前
|
算法 计算机视觉
LabVIEW开发3D颈动脉图像边缘检测
LabVIEW开发3D颈动脉图像边缘检测
28 0
|
存储 算法 计算机视觉
【OpenCV图像处理8】图像轮廓
【OpenCV图像处理8】图像轮廓
256 0
|
5月前
|
编解码 计算机视觉
OpenCV(十六):高斯图像金字塔
OpenCV(十六):高斯图像金字塔
108 1
|
5月前
|
算法 计算机视觉
[Halcon&图像] 图像滤波算法原理
[Halcon&图像] 图像滤波算法原理
202 1
|
5月前
|
编解码 对象存储 UED
[Halcon&标定] 单相机标定
[Halcon&标定] 单相机标定
178 1
|
5月前
|
文字识别 Python
Halcon 学习笔记五:几何定位+仿射变换+测量
Halcon 学习笔记五:几何定位+仿射变换+测量
448 0
|
5月前
|
计算机视觉
OpenCV(十二):图像透视变换
OpenCV(十二):图像透视变换
207 0
|
5月前
|
算法
[Halcon&图像] 图像阈值分割算法汇总
[Halcon&图像] 图像阈值分割算法汇总
168 0
|
算法 API 计算机视觉
【OpenCV图像处理5】图像的变换
【OpenCV图像处理5】图像的变换
158 0