数字图像处理——直方图均衡化与颜色迁移算法的c++实现

C++(OpenCV)自己实现彩色直方图均衡化 对于直方图均衡化,我的理解是一个图像原来的像素集中在一个灰度范围里,我们对这种图不敏感,因为其灰度值集中,变化不明显。如果我们把这些像素点的灰度范围扩大,图像就会显得比较清晰。直方图均衡化就是通过一个映射函数,把原图像素点的灰度值映射为一个新的值,使得图像的像素点灰度值在全部灰度范围内比较均匀分布。 阅读详情

项目源代码下载链接(VS2015)

1.直方图均衡化

主要思想

把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):
(1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。
(2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。
累积分布函数(cumulative distribution function,CDF)即可以满足上述两个条件,并且通过该函数可以完成将原图像f的分布转换成g的均匀分布。此时的直方图均衡化映射函数为: = EQ( ) = (ni/n) = pf() ,(k=0,1,2,……,L-1)
上述求和区间为0到k,根据该方程可以由源图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布求出到的灰度映射关系。在重复上述步骤得到源图像所有灰度级到目标图像灰度级的映射关系后,按照这个映射关系对源图像各点像素进行灰度转换,即可完成对源图的直方图均衡化。

c++实现主要代码:

//统计灰度频率直方图
cimg_forXY(image, i, j) { 
  if (image.spectrum() == 1) greyCount[image(i, j)]++;
  else if (image.spectrum() == 3) {
    rCount[image(i, j, 0)]++;
    gCount[image(i, j, 1)]++;
    bCount[image(i, j, 2)]++;

  }

//累加,扩展到[0, 255],得到新的灰度级
for (i = 1; i < dim; i++) {
    greyCount[i] += greyCount[i - 1];
    bCount[i] += bCount[i - 1];
    gCount[i] += gCount[i - 1];
    rCount[i] += rCount[i - 1];

    //扩展到[0, 255]
    greyNew[i] = ((float)greyCount[i] / image._width / image._height) * (dim - 1) + 0.5;

    bNew[i] = ((float)bCount[i] / image._width / image._height) * (dim - 1) + 0.5;
    rNew[i] = ((float)rCount[i] / image._width / image._height) * (dim - 1) + 0.5;
    gNew[i] = ((float)gCount[i] / image._width / image._height) * (dim - 1) + 0.5;
    }

//灰度转换
//如果是灰度图
if (image.spectrum() == 1) {
&nb
颜色直方图匹配(一) 要提取一张图的色彩特征有很多种方法,最常用的一种特征是提取它的颜色直方图分布特征。 阅读详情

相关推荐

直方图均衡化C++代码实现

本文主要介绍了基于直方图均衡化的图像增强方法,以及C++代码实现,也给出了相关的论文,供阅读参考

我的博客 2823

c++实现直方图均衡化

根据累积直方图调整原始图像的像素值。首先,我们选择一副较暗或者较量的图,对其进行直方图均衡化处理,首先我们先画一下下图的灰度直方图,可以看到图像整体亮度偏低,因此灰度级应该分布在较低的地方,没有充分利用到亮区的信息。直方图均衡化是一种用于图像增强的方法,通过调整图像的像素值分布,使得图像的对比度更好,细节更加显著。直方图均衡化能够扩展图像的动态范围,使得图像中的像素值更均匀分布,从而提高图像的视觉效果和质量。将灰度直方图归一化,将每个灰度级别出现的像素数量除以总像素数量,得到归一化后的直方图

mapleleaf2的博客 1367

VC++车牌识别系统:传统图像处理算法实战OpenCV配置详解

计算机视觉是人工智能的重要分支,其核心原理是通过算法让机器“看懂”图像内容。在众多应用场景中,车牌识别作为经典案例,融合了图像预处理、特征提取、模式识别等基础技术,具有很高的工程实践价值。传统车牌识别通常遵循“定位-分割-识别”的技术路线,利用OpenCV等开源库实现高效处理。本文聚焦于VC++开发环境下的车牌识别系统,深入解析基于边缘检测和颜色空间的车牌定位算法、垂直投影字符分割方法以及模板匹配识别技术,并详细说明Visual Studio中OpenCV的配置要点调试技巧,为图像处理入门和传统算法优化提

ctpaknc9526的博客 394

RGB图像彩色直方图统计,C++

该函数的功能为计算彩色直方图,并返回最大值。 本人原创代码,转载或引用请注明出处。 void ColorEnhance::getMaxcolor(Mat &image,int *max_color) { int **temp_array=NULL; int *merge; merge = new int[MAX_LENGTH]; temp_array =...

cxn511的博客 1148

C++实现直方图均衡化颜色迁移

颜色空间是描述颜色的一组坐标系统,对于图像处理来说是一个核心概念。颜色空间转换是指将图像从一个颜色空间转换到另一个颜色空间的过程。常见的颜色空间包括RGB颜色空间、HSV颜色空间和YUV颜色空间等。转换颜色空间的原因有很多,最常见的是为了在不同的颜色空间中更容易地提取颜色特征,例如,人眼感知颜色的方式是通过色调、饱和度和亮度来描述的,这在HSV颜色空间中更容易实现。而计算机处理图像通常使用RGB颜色空间,因为它计算机显示器的色彩表示方式直接相关。

weixin_30591519的博客 414

数字图像处理机器视觉的实践教程:Visual C++Matlab代码实现第二版

Matlab是MathWorks公司开发的一款高性能的数值计算环境和第四代编程语言。它广泛应用于各种领域,特别是在图像处理、数据可视化、算法开发等方向。要在计算机上使用Matlab,首先要进行安装。Matlab支持Windows、macOS和Linux等主流操作系统。安装过程包括选择安装组件、配置路径、接受许可协议等步骤。

weixin_42309599的博客 623

零基础小白如何自学数字图像处理

自学数字图像处理需要循序渐进,首先从基础的图像操作开始,再逐步掌握高级的图像处理算法技术。通过不断地实践项目,巩固理论知识,同时关注前沿技术,如深度学习人工智能在图像处理中的应用,逐步提升自己的技术水平。

小宝哥Code的专栏 1527

Python图像处理实战:从RGB原理到五种场景的像素级色彩修改

RGB色彩模型是数字图像处理的基础,它通过红、绿、蓝三原色通道的数值组合来定义颜色。理解其底层原理是进行任何图像操作的前提,这包括色彩空间转换、通道分离像素值计算。掌握RGB修改技术,能够实现自动化色彩校正、风格化滤镜和批量图像处理,在UI设计、摄影后期和计算机视觉等领域具有广泛应用。本文以Python为核心工具,结合Pillow和OpenCV库,通过实战代码演示了全局调色、特定颜色替换、局部亮度调整、色彩平衡校正和风格化滤镜等五种常见场景,并深入探讨了YUV转RGB等色彩空间转换以及处理过程中的性能优化

weixin_33802505的博客 783

彩色图像处理核心技术:从色彩空间到工业应用

彩色图像处理是计算机视觉的基础技术,通过RGB、HSV、Lab等色彩空间的转换处理,能有效提升图像信息的利用率。其核心原理在于不同色彩空间对颜色特征的解耦表示,例如HSV空间将色相、饱和度、明度分离,更适合进行颜色识别和光照调整。在工程实践中,彩色图像增强、边缘检测和分割算法广泛应用于医疗影像分析、自动驾驶和工业质检等领域。特别是在工业场景中,结合Retinex理论的多尺度色彩校正和基于张量分析的边缘检测技术,能显著提升检测精度。随着深度学习发展,轻量级网络如ENet在实时语义分割中展现出优势,但传统方法

weixin_34405557的博客 396

图像算法(需要精进的部份,详细看

• 3D视觉:点云处理(PCL、PointNet)、NeRF(三维重建)、SLAM(ORB-SLAM、VINS)◦ 核心库:NumPy(数值计算)、Pandas(数据处理)、Matplotlib/Seaborn(可视化)• 工具链:Git(版本控制)、Docker(环境隔离)、CMake(C++编译)、Linux(服务器操作)• 书籍:《数字图像处理》(冈萨雷斯)、《深度学习》(花书)、《PyTorch深度学习实战》• 监督学习:线性回归、逻辑回归、SVM、决策树、随机森林、XGBoost。

2401_82607598的博客 248

OPENCV-4 学习路线图

图像算法图像算法 图像算法 作者:余昌黔 链接:https://www.zhihu.com/question/51369979/answer/126568619 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 泻药。在跑算法的时候最适合答题了呢(害羞脸图像处理说到底是一门数学和实践结合的学科。所以要搞算法,数学基础必不可少,同时工程实践性的话,编程能力不能弱。二者不可偏废。我向来推崇以练促学,以学促练。所以不会一上来就推荐一堆理论性东西的。1)opencv。无论以后是否使用

嵌入式与人工智能 861

Python图像处理工具库全解析:从Pillow到深度学习

图像处理是计算机视觉的基础技术,通过像素级操作实现特征提取增强。Python生态提供了从基础操作到深度学习的完整工具链,其中OpenCV凭借优化的C++底层实现工业级性能,Pillow则擅长轻量级格式转换。在AI时代,PyTorch Vision等框架将传统算法神经网络结合,支持从数据增强到模型部署的全流程。实际开发中常组合使用多个库,例如用Scikit-image进行算法原型开发,再通过TensorRT加速生产部署。这些工具在医疗影像分析、自动驾驶、工业质检等场景展现强大价值,而新兴的Kornia等库

weixin_33698823的博客 326

C++OpenCV系统学习(11)——直方图均衡化直方图计算、直方图比较、直方图方向投影

1.概念 1.1直方图概念 1.2直方图均衡化概念 图像直方图均衡化实现直方图均衡化API: 直方图均衡化案例 void MyApi::histogramEqualize(Mat& image) { Mat gray_image,dst; cvtColor(image, gray_image, COLOR_BGR2GRAY); imshow("灰度图", gray_image); equalizeHist(gray_image, dst); imsho...

bigData1994pb的博客 2590

calHist()-使用OpenCV和C++计算直方图

可以将直方图视为显示图像强度分布的图形。X 轴为像素值(通常范围为 0 到 255),Y 轴为图片中的像素数。这只是查看图像的不同方式。当您查看图像的直方图时,您可能会感觉到图像的对比度、亮度、强度分布等。今天几乎所有的图像处理软件都包含直方图功能。

weixin_43229348的博客 2757

颜色直方图特征代码

颜色直方图比较简单,计算各个

guoyilin的专栏 3585

【OpenCV】直方图以及灰度直方图C++实现

什么是灰度直方图: 在数字图像处理中,灰度直方图是一种计算代价非常小但很有用的工具,它概括了一幅图像的灰度级信息。灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。 c++代码如下: Mat calcGrayHist(const Mat &amp;amp; image) { Mat histogram = Mat::zeros(Size(256,1),CV_32SC1);...

weixin_42104289的博客 8813

直方图均衡的C++实现方法

直方图均衡的C++实现方法 一. 原理 灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数,即h(k)=nk(k=0,1,⋯ ,L−1)h(k)=n_k\quad (k=0,1,\cdots,L-1)h(k)=nk​(k=0,1,⋯,L−1),其中LLL为图像的灰度级数。 直方图均衡的目的是将图像的直方图修正为均匀分布形式(离散分布做不到完全均匀,但可以接近),增加像素灰度值的动态范...

szzheng的博客 2310

直方图均衡化原理及C++实现

直方图均衡化是常用的图像增强的方法。通过一种映射改变图像中的灰度值,增加图像灰度值的动态范围从而增加图像的对比度。过度曝光的图像中的灰度值主要集中在高亮度的范围内,而曝光不足的图像中的灰度值主要集中在低亮度的范围内。使用直方图均衡化技术可以使得整幅图像的灰度值均匀分布在整个动态范围,从而增加图像的对比度,提升视觉观感。 1、直方图的基本概念 首先介绍一下直方图的基本概念,直方图是对图像像素值的统计,一般像素值的范围为0~255;直方图是对各个不同灰度值的像素进行统计,下面是一张直方图。 下面 下面是几种图像

shentu7的博客 6728
上一篇: spring mvc 整合 jdbc 实现Web后端数据库
下一篇: FaceMorphing
linxp6
博客等级 码龄12年 4粉丝 3原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值