数字图像的直方图均衡化(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,如需转载请自行联系原作者


相关文章
|
4月前
|
数据挖掘 计算机视觉 Python
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
43 1
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
|
1月前
|
计算机视觉
OpenCV(二十九):图像腐蚀
OpenCV(二十九):图像腐蚀
25 0
|
4月前
|
存储 传感器 算法
数字图像处理的图像操作
数字图像处理的图像操作
|
4月前
|
计算机视觉
OpenCV(十二):图像透视变换
OpenCV(十二):图像透视变换
84 0
|
4月前
|
算法
[Halcon&图像] 图像阈值分割算法汇总
[Halcon&图像] 图像阈值分割算法汇总
54 0
|
4月前
|
算法 数据挖掘
[Halcon&图像] 阈值分割算法拓展
[Halcon&图像] 阈值分割算法拓展
51 1
|
4月前
|
算法
[Halcon&图像] 边缘提取算法汇总
[Halcon&图像] 边缘提取算法汇总
132 0
|
11月前
|
机器学习/深度学习 传感器 算法
【图像隐写】基于分数傅里叶结合SVD实现数字水印嵌入攻击提取FRFT+SVD含Matlab源码
【图像隐写】基于分数傅里叶结合SVD实现数字水印嵌入攻击提取FRFT+SVD含Matlab源码
|
机器学习/深度学习 存储 传感器
【图像隐藏】基于小波变换和SPHIT的图像嵌入提取含水印攻击附matlab代码
【图像隐藏】基于小波变换和SPHIT的图像嵌入提取含水印攻击附matlab代码
|
监控 算法 计算机视觉
用分水岭算法实现图像的分割与提取---OpenCV-Python开发指南(36)
用分水岭算法实现图像的分割与提取---OpenCV-Python开发指南(36)
304 0
用分水岭算法实现图像的分割与提取---OpenCV-Python开发指南(36)