`
ihuashao
  • 浏览: 4544916 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

图像灰度值调整(C/C++源代码)

阅读更多

图像的象素值变换,包括亮度、对比度和GAMMA校正算法,环境是OPENCV4.0,VC6.0。算法参考了MATLAB函数 imadjust 。

//
// perform histgram equalization for single channel image
//

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

/*
Reference for correspondent MATLAB function: imadjust
IMADJUST Adjust image intensity values or colormap.
J = IMADJUST(I,[LOW_IN HIGH_IN],[LOW_OUT HIGH_OUT],GAMMA) maps the
values in intensity image I to new values in J such that values between
LOW_IN and HIGH_IN map to values between LOW_OUT and HIGH_OUT. Values
below LOW_IN and above HIGH_IN are clipped; that is, values below LOW_IN
map to LOW_OUT, and those above HIGH_IN map to HIGH_OUT. You can use an
empty matrix ([]) for [LOW_IN HIGH_IN] or for [LOW_OUT HIGH_OUT] to
specify the default of [0 1]. GAMMA specifies the shape of the curve
describing the relationship between the values in I and J. If GAMMA is
less than 1, the mapping is weighted toward higher (brighter) output
values. If GAMMA is greater than 1, the mapping is weighted toward lower
(darker) output values. If you omit the argument, GAMMA defaults to 1
(linear mapping).

Note that if HIGH_OUT < LOW_OUT, the output image is reversed, as in a
photographic negative.
====
src and dst are grayscale, 8-bit images;
Default input value:
[low, high] = [0,1];
[bottom, top] = [0,1];
gamma = 1;
if adjust successfully, return 0, otherwise, return non-zero.
Author: R.Z.Liu, 18/09/04
====
*/
int ImageAdjust(IplImage* src, IplImage* dst,
double low, double high, // low and high are the intensities of src
double bottom, double top, // mapped to bottom and top of dst
double gamma )
{
double low2 = low*255;
double high2 = high*255;
double bottom2 = bottom*255;
double top2 = top*255;
double err_in = high2 - low2;
double err_out = top2 - bottom2;

int x,y;
double val;

if( low<0 && low>1 && high <0 && high>1 && bottom<0 && bottom>1 && top<0 && top>1)
return 1;

// intensity transform
for( y = 0; y < src->height; y++)
{
for (x = 0; x < src->width; x++)
{
val = ((uchar*)(src->imageData + src->widthStep*y))[x];
val = pow((val - low2)/err_in, gamma) * err_out + bottom2;
if(val>255) val=255; if(val<0) val=0; // Make sure src is in the range [low,high]
((uchar*)(dst->imageData + dst->widthStep*y))[x] = (uchar) val;
}
}
return 0;
}

分享到:
评论

相关推荐

    c++ 灰度图二值化源码

    采用大律法灰度图二值化的源代码,提供了主函数机二值化的调用函数

    Visual c++数字图像处理典型算法及实例源代码

    Visual c++数字图像处理典型算法及实例源代码,内容包括: 源码目录结构图、256色转灰度图、Hough变换、Walsh变换、二值化变换、亮度增减、傅立叶变换、反色、取对数、取指数、图像平移、图像旋转、图像细化、图像...

    C++图像处理常用操作的源代码

    用于图像处理中常用操作如二值化/边缘检测,灰度拉伸/等的源代码,

    opencv 图像处理源代码(附效果图片)

    由于工作需要,自己亲手用c++builder(代码跟vc++通用)的opencv图像处理程序,附上源代码,其中程序实体代码在unit1.cpp中,可用记事本查看。实现了二值图像(0,255)搜索不同形状(黑色为种子)的区域,并记录了...

    图像处理的28个C++源程序

    C++图像处理源程序,包括:256色转灰度图、对比度拉伸、二值化变换、反色等28中处理方法的代码

    c语言c++项目源代码_c语言实现图片转化为 ASCII 图.rar

    2. **图像处理**:对读取的图像进行灰度化、二值化等预处理操作,以简化后续ASCII转换过程。 3. **字符替换算法**:根据像素值与字符的映射关系,将图像中的每个像素点替换为相应的ASCII字符。用户可自定义字符集以...

    C++多种图像变换源代码

    图像处理与变换,灰度值,颜色值变换,拉普拉斯变换等

    C++基于 OpenCV+Qt 库实现的图像处理软件源代码+详细项目文档,可实现对图像的灰度化、二值化、均值滤波、边缘检测等处理

    本图像处理软件,我使用了 C++ 丰富的第三方开源库,如 OpenCV 、 Qt 来制作,实现了打开图像文件、显示图像、存储处理后图像,对图像进行灰度化、二值化(阈值可调)、3×3 均值滤波、3×3 中值滤波、拉普拉斯 4 ...

    精通Visual.C++指纹模式识别系统算法及实现 (完整版+中文版)pdf 格式

    5.4.4 指纹图像灰度均衡的C++源代码实现 97 5.5 指纹图像的收敛 99 5.5.1 指纹图像混沌发散的自然模型 99 5.5.2 指纹图像混沌发散的物理模型 100 5.5.3 指纹图像混沌发散的数学模型 101 5.5.4 指纹图像收敛的C++源...

    数字图像处理 图像分割程序 分水岭分割 prewitt算子

    分水岭法是将一幅图像看成一个拓扑地形图,其中灰度值被认为是地形的高度值。高灰度值对应着山峰,低灰度值对应着山谷。水从高处留下时,会流向地势低的地方,直到某一局部低洼处才停下来,这个低洼处被称为吸水盆地...

    VC 数字图像识别源代码.rar

    VC 图像数字识别预处理程序实例,可实现256色转灰度图、二值化、梯度锐化、去离散噪声、字符分割、尺寸标准一体化、紧缩重排、保存图像预处理结果为BMP图像等功能,可识别简单的阿拉伯数字,用到了神经网络识别等...

    Visual C++实用图像处理专业教程

    专业版软件包括该书全部图像处理的C语言源程序以及可执行的Visual C++ 界面源程序,可以满足大学教师、科研人员以及图像处理专业人员的需要。 3. \ImageSys试用版 包括通用图像处理系统ImgeSys的介绍和试用版的安装...

    图像的形态操作 VC++源代码

    图像的形态操作VC++源代码,可实现对二值图像和灰度图像的形态学操作,基于visual stdio 6.0建立

    VC++ 车牌识别源码.rar

    VC++ 车牌识别源代码 步骤包括 图像灰度化 灰度均衡化 边缘检测 预处理 定位车牌 分割车牌 车牌二值化 VS2015测试通过

    数字识别源代码

    VC++图像预处理及数字识别源代码,可以对输入的图片进行灰度化、二值化处理,然后对字符进行分割,尺寸标准归一化处理

    vc++ 应用源码包_6

    C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南...

    OpenCV图像在MFC中显示

    该类不仅可以以1:1、全窗口、半窗口、动态选择等方式显示IplImage图像,还可以对图像进行平移、放缩,并在信息区同步显示图像坐标系下鼠标所在位置及RGB或灰度值。除此之外还可以在控件上直接进行矩形的绘制操作,会...

    OpenCV将彩色视频转换为灰度视频的代码

    3.接收源代码发现有一段代码是这么写的: CvVideoWriter *writer = cvCreateVideoWriter( "myvideo.avi", CV_FOURCC('X', 'V', 'I', 'D'), fps, size); 一下子问题症结就找到了。 要转化为灰度,那这段代码里对...

    VC基本图像处理源码集,适用于256色图片

    一些基本的VC图像处理源代码集,目录中的程序已经过作者调试,保证可以正常运行。调试时的计算机的配置:Windows2000/XP + Visual Studio 6.0 企业版。注意,目录中大部分程序只能对256色图像进行操作。  比如:...

Global site tag (gtag.js) - Google Analytics