数字图像的直方图均衡化是常用的图像增强方法,因为均衡化是自动完成的,无需人工干预,而且常常得到比较满意的结果。下面的程序是利用OPENCV提供的函数,实现这个功能。需要OPENCV B4.0的支持,在VC6下编译通过。
//
// perform histgram equalization for single channel image
// AssureDigit Sample code
//
#include "cv.h"
#include "highgui.h"
#define HDIM 256 // bin of HIST, default = 256
int main( int argc, char** argv )
{
IplImage *src = 0, *dst = 0;
CvHistogram *hist = 0;
int n = HDIM;
double nn[HDIM];
uchar T[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 );
// calculate histgram 计算直方图
hist = cvCreateHist( 1, &n, CV_HIST_ARRAY, 0, 1 );
cvCalcHist( &src, hist, 0, 0 );
// Create Accumulative 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]
}
// Do intensity transform for source image
dst = cvCloneImage( src );
T_mat = cvCreateMatHeader( 1, 256, CV_8UC1 );
cvSetData( T_mat, T, 0 );
// directly use 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 );
return 0;
}
分享到:
相关推荐
直方图均衡化是一种在数字图像处理中广泛使用的增强对比度的方法。它的基本思想是通过对图像的灰度级分布进行变换,将原本集中在少数灰度级的像素分布扩展到整个灰度范围内,从而提高图像的整体视觉效果。在C++中...
在数字图像处理领域,直方图均衡化是一种广泛使用的增强图像对比度的技术。直方图是描述图像像素亮度分布的统计图表,而均衡化则是通过调整图像的灰度级分布,使得图像的直方图更加均匀,从而提高整体的视觉效果。 ...
直方图均衡化是数字图像处理中的一个重要技术,主要用于改善图像的对比度,尤其是在图像的亮度分布不均时效果显著。直方图是描述图像像素灰度值频率分布的图形,通过观察直方图,我们可以了解图像的整体亮度分布情况...
数字图像直方图均衡化 数字图像直方图均衡化是一种常用的图像增强方法,它能够自动完成图像增强,无需人工干预,且常常得到比较满意的结果。下面将对该方法进行详细的解释,并提供相应的C/C++源代码。 一、直方图...
数字图像的直方图均衡化(C/C++源代码) 数字图像的直方图均衡化是一种常用的图像增强方法,它通过调整图像的灰度直方图以改善图像的对比度和亮度。这种方法的优点是自动完成的,无需人工干预,且常常得到比较满意...
直方图均衡化是一种在数字图像处理中广泛使用的图像增强技术,主要目的是改善图像的对比度,使其在视觉上更具吸引力。在这个项目中,我们关注的是一个使用VC++编程语言实现直方图均衡化的工程文件。 直方图是图像...
直方图均衡化在实际应用中具有广泛的价值,例如医学图像分析、遥感图像处理、数字图像增强等领域。它不仅可以提升图像的视觉效果,还能帮助后续的图像分析和识别任务更准确地提取特征。 在提供的压缩包文件中,...
直方图均衡化是数字图像处理中的一个基本技术,它能改善图像的对比度,尤其在图像的亮度分布不均匀时效果显著。本示例主要介绍如何使用VC++实现这一功能,通过处理BMP格式的图片来展示其原理和应用。 首先,我们...
直方图均衡化是一种在数字图像处理中广泛使用的增强图像对比度的方法,尤其适用于低动态范围的图像。在C++编程环境下实现直方图均衡化,可以帮助开发者更好地理解和控制图像处理过程。 直方图是描述图像中像素亮度...
而"直方图均衡"可能是一个包含源代码的文件或文件夹,里面可能有实现直方图均衡化的C++代码。 直方图均衡化通常包括以下步骤: 1. **计算原始直方图**:遍历图像中的每一个像素,统计每个灰度级出现的次数,构建...
图像的直方图均衡化是数字图像处理中的一个重要概念,它是一种增强图像对比度的技术。在图像处理领域,直方图通常用来表示图像中不同灰度级别的像素出现的频率,而直方图均衡化则是通过对图像的灰度分布进行重新映射...
在这个"图像灰度线性变换及直方图均衡化源代码.7z"压缩包中,包含的源代码将帮助我们理解并实现这两个概念。 1. **灰度线性变换**: 灰度线性变换是一种简单的图像调整方法,它通过改变像素的灰度值来改变图像的...
灰度直方图均衡化是数字图像处理中的一个重要技术,主要用来改善图像的对比度,尤其是在图像的亮度分布不均匀时效果显著。在VC++环境下,我们可以利用编程手段实现这一功能,以提升图像的视觉效果。 直方图是描述...
在数字图像处理领域,直方图均衡化与颜色迁移算法是两种重要的技术,它们用于改善图像的视觉效果和实现图像风格的转换。本篇将详细阐述这两种算法的原理及其C++实现。 首先,直方图均衡化是一种增强图像对比度的...
在图像处理领域,直方图均衡化是一种常用的...同时,提供的"数字图像的直方图均衡化(C-C++源代码).mht"文件可能包含更深入的代码实例,而"www.pudn.com.txt"可能是获取更多相关资源的链接,对于深入学习非常有帮助。
Visual c++数字图像处理典型算法及实例源代码,内容包括: 源码目录结构图、256色转灰度图、Hough变换、Walsh变换、二值化变换、亮度增减、傅立叶变换、反色、取对数、取指数、图像平移、图像旋转、图像细化、图像...
直方图均衡化是一种在数字图像处理中广泛使用的增强对比度的方法,尤其适用于低对比度图像。这个技术基于统计学原理,通过对图像的灰度级分布进行调整,使得图像的整体灰度级分布更加均匀,从而达到提升视觉效果的...
本资源是基于Visual C++的数字图像处理源代码,由何斌等专家编写,对于学习和研究图像处理技术具有很高的参考价值。 在数字图像处理中,主要涉及以下几个关键知识点: 1. 图像基本操作:包括图像的读取、显示、...
《数字图像处理与机器视觉——Visual C++与Matlab实现配套书籍源代码》是一本深入探讨数字图像处理和机器视觉理论及其应用的书籍。书中涵盖了从基础理论到实际编程实现的全过程,通过Visual C++和Matlab两种强大的...
直方图均衡化是数字图像处理中的一个重要技术,它通过改变图像像素的灰度级分布,使得整个图像的灰度动态范围增大,从而提高图像的对比度。在OpenCV库中,虽然提供了`equalizeHist()`函数来实现直方图均衡化,但为了...