精华内容
下载资源
问答
  • 图像增强的定义:是通过一定手段对原图像附加...基于空域的算法处理时直接对图像灰度级做运算,基于频域的算法是在图像的某种变换域内对图像的变换系数值进行某种修正,是一种间接增强的算法。空域法:对图像中的像...

    作者:RayChiu_Labloy
    版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处


    目录

    图像增强的定义:

    图像增强的分类:

    空域法: 

    频域法: 

    关于空域法分类: 

    点运算算法定义和分类:

    邻域增强算法分类:图像平滑和锐化两种。

     1.详谈空域法-->点运算-->灰度变换

    (1) 线性变换 

    (2)分段线性变换 

    (3) 非线性灰度变换 

     2.详谈空域法-->点运算-->直方图修整法 

    (0)直方图的相关术语:

    (1) 直方图均衡化 

    (2)直方图规定化 


    图像增强的定义:

            是通过一定手段对原图像附加一些信息或变换数据,有选择地突出图像中感兴趣的特征或者抑制(掩盖)图像中某些不需要的特征,使图像与视觉响应特性相匹配。

    图像增强的分类:

            在图像增强过程中,不分析图像降质的原因,处理后的图像不一定逼近原始图像。图像增强技术根据增强处理过程所在的空间不同,可分为基于空域的算法和基于频域的算法两大类。

    空域法 

            空域法对图像中的像素点进行操作,对图像灰度级做运算,用公式描述如下:
                                                                    g(x,y)=f(x,y)*h(x,y)
            其中是f(x,y)是原图像;h(x,y)为空间转换函数;g(x,y)表示进行处理后的图像。

    频域法: 

            基于频域的算法是在图像的某种变换域内对图像的变换系数值进行某种修正,是一种间接增强的算法。

            把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。一般做法是对图像傅里叶变换后的频谱进行处理,再逆傅里叶得到新的图像。

    关于空域法分类: 

            基于空域的算法分为点运算算法邻域去噪算法  。

    • 点运算算法定义和分类:

            定义:目的或使图像成像均匀,或扩大图像动态范围,扩展对比度。

            分类:包括灰度级校正、灰度变换直方图修正

    • 邻域增强算法分类:图像平滑和锐化两种。

            平滑:均值滤波、中值滤波

            锐化:常用算法有梯度法、算子、高通滤波、掩模匹配法、统计差值法等

     1.详谈空域法-->点运算-->灰度变换

            灰度变换可调整图像的动态范围或图像对比度,是图像增强的重要手段之一。

    (1) 线性变换 

            令图像f(i,j)的灰度范围为[a,b],线性变换后图像g(i,j)的范围为[a′,b′],如下图

     g(i,j)与f(i,j)之间的关系式为:

     在曝光不足或过度的情况下,图像灰度可能会局限在一个很小的范围内。这时在显示器上看到的将是一个模糊不清、似乎没有灰度层次的图像。采用线性变换对图像每一个像素灰度作线性拉伸,可有效地改善图像视觉效果。

    (2)分段线性变换 

            为了突出感兴趣目标所在的灰度区间,相对抑制那些不感兴趣的灰度区间,可采用分段线性变换。如下图所示。

     设原图像在[0,Mf],感兴趣目标所在灰度范围在[a,b],欲使其灰度范围拉伸到[c,d],则对应的分段线性变换表达式为

     通过调整折线拐点的位置及控制分段直线的斜率,可对任一灰度区间进行拉伸或压缩。

    (3) 非线性灰度变换 

             当用某些非线性函数如对数函数、指数函数等,作为映射函数时,可实现图像灰度的非线性变换。
    ①对数变换
    对数变换的一般表达式为 

    这里a,b,c是为了调整曲线的位置和形状而引入的参数。当希望对图像的低灰度区较大的拉伸而对高灰度区压缩时,可采用这种变换,它能使图像灰度分布与人的视觉特性相匹配。 

     ②指数(伽玛)变换
         指数变换又称为 伽玛变换 或 幂次变换,指数变换的一般表达式为

    这里参数a,b,c用来调整曲线的位置和形状。这种变换能对图像的高灰度区给予较大的拉伸。

     2.详谈空域法-->点运算-->直方图修整法 

            灰度直方图反映了数字图像中每一灰度级与其出现频率间的关系,它能描述该图像的概貌,它是另一种对图像理解的方式。通过观察图像的直方图,我们可以得到关于图像的相反,亮度,强度分布等直观信息,如下图所示:

     (左边为原图右边为对应的灰色直方图)

            上图中我们可以看到原图像及其直方图。(注,这里的直方图是在灰度图像基础上绘制的,而不是彩色图像)。

    (0)直方图的相关术语:

    1. BINS: 像素区间组数(上图右侧直方图x轴),假如我们要把0-255不是按照像素分而是按照像素区间分组,0到15,16到31,..... 240到255的像素的数量。那么我们只需要16个值就可以代表这个直方图了。所以我们接下去要做的仅仅是把整个直方图分为16个部分(sub-part)并保证每个部分的值相加起来就是所有像素加起来的总和。这里的每个部分我们称之称为“BIN”。在一开始的例子中,BIN 数量为256(每一个数字代表一个像素),而在我们稍后分隔后的例子里,BIN 的数量就是16 了。BIN 用来代表OpenCV 文档中的术语histSize 。
    2. DIMS:这是我们收集的数据有关参数的个数。在上面这个例子中,我们收集数据只关心一个参数,强度值,这里是1。
    3. RANGE:这是我们想要测量的强度值的范围。通常情况下,范围是 [0,256],即所有的强度值。

            通过修改直方图的方法增强图像是一种实用而有效的处理技术。直方图修整法包括直方图均衡化直方图规定化两类:

    (1) 直方图均衡化 

            直方图均衡化是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。

            优点:这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
            缺点:是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。
            使用场景:这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。 

    下面先讨论连续变化图像的均衡化问题,然后推广到离散的数字图像上。为讨论方便起见,设r和s分别表示归一化了的原图像灰度和经直方图修正后的图像灰度。即在[0,1]区间内的任一个r值,都可产生一个s值,且.

            T(r)作为变换函数,满足下列条件:

    ①在0≤r≤1内为单调递增函数,保证灰度级从黑到白的次序不变;
    ②在0≤r≤1内,有0≤T(r)≤1,确保映射后的像素灰度在允许的范围内。

            反变换关系为,T-1(s)对s同样满足上述两个条件。由概率论理论可知,如果已知随机变量r的概率密度为pr(r),而随机变量s是r的函数,则s的概率密度ps(s)可以由pr(r)求出。假定随机变量s的分布函数用Fs(s) 表示,根据分布函数定义

    利用密度函数是分布函数的导数的关系,等式两边对s求导,有:

     可见,输出图像的概率密度函数可以通过变换函数T(r)可以控制图像灰度级的概率密度函数,从而改善图像的灰度层次,这就是直方图修改技术的基础。

             从人眼视觉特性来考虑,一幅图像的直方图如果是均匀分布的,即Ps(s)=k(归一化时k=1)时,该图像色调给人的感觉上该图像比较协调。因此要求将原直方图通过T(r)调整为均匀分布的.然后反过来按均衡化的直方图去调整原图像,以满足人眼视觉要求的目的。因为归一化假定Ps(s)=1

     ,由密度函数则有

     两边积分得

     上式表明,当变换函数为r的累积分布函数时,能达到直方图均衡化的目的。对于离散的数字图像,用频率来代替概率,则变换函数T(rk)的离散形式可表示为:

     上式表明,均衡后各像素的灰度值sk可直接由原图像的直方图算出。一幅图像sk同rk之间的关系称为该图像的累积灰度直方图。

     下面举例说明直方图均衡过程。例:假定有一幅总像素为n=64×64的图像,灰度级数为8,各灰度级分布列于表中。对其均衡化计算过程如下:

    (2)直方图规定化 

            在某些情况下,并不一定需要具有均匀直方图的图像,有时需要具有特定的直方图的图像,以便能够增强图像中某些灰度级。直方图规定化方法就是针对上述思想提出来的。直方图规定化是使原图像灰度直方图变成规定形状的直方图而对图像作修正的增强方法。可见,它是对直方图均衡化处理的一种有效的扩展。直方图均衡化处理是直方图规定化的一个特例。对于直方图规定化,下面仍从灰度连续变化的概率密度函数出发进行推导,然后推广出灰度离散的图像直方图规定化算法。假设pr(r)和pz(z)分别表示已归一化的原始图像灰度分布的概率密度函数和希望得到的图像的概率密度函数。首先对原始图像进行直方图均衡化,即求变换函数:

     假定已得到了所希望的图像,对它也进行均衡化处理,即

     它的逆变换是

     这表明可由均衡化后的灰度得到希望图像的灰度。
         若对原始图像和希望图像都作了均衡化处理,则二者均衡化的ps(s)和pv(v)相同,即都为均匀分布的密度函数。由s代替v 得 z=G-1(s),这就是所求得的变换表达式。根据上述思想,可总结出直方图规定化增强处 理的步骤如下:
    ①对原始图像作直方图均衡化处理;
    ②按照希望得到的图像的灰度概率密度函数pz(z),求得变换函数G(z);
    ③用步骤①得到的灰度级s作逆变换z= G-1(s)。
         经过以上处理得到的图像的灰度级将具有规定的概率密度函数pz(z)。采用与直方图均衡相同的原始图像数据(64×64像素且具有8级灰度),其灰度级分布列于表中。给定的直方图的灰度分布列于表中。对应的直方图如下:

     利用直方图规定化方法进行图像增强的主要困难在于要构成有意义的直方图。图像经直方图规定化,其增强效果要有利于人的视觉判读或便于机器识别。下面是一个直方图规定化应用实例。

     图(C)、(c)是将图像(A)按图(b)的直方图进行规定化得到的结果及其直方图。通过对比可以看出图(C)的对比度同图(B)接近一致,对应的直方图形状差异也不大。这样有利于影像融合处理,保证融合影像光谱特性变化小。

    【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】  

    展开全文
  • openCV绘制直方图 先直接放代码: #encoding:utf-8 import cv2 import numpy as np import matplotlib.pyplot as plt src = cv2.imread('./out/partition7.jpg') cv2.imshow("src", src) cv2.waitKey(0) cv2....

    openCV绘制直方图

    先直接放代码:

    #encoding:utf-8
    import cv2  
    import numpy as np
    import matplotlib.pyplot as plt
    
    src = cv2.imread('./out/partition7.jpg')
    cv2.imshow("src", src)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    plt.hist(src.ravel(), 256)
    plt.show()
    

    其中:

    .hist()作用是绘制直方图

    .ravel()作用是将多维数组降为一维数组,格式为:一维数组 = 多维数组.ravel()

    输入图片:

    输出结果:

     

    注意,在绘制的直方图中,横坐标表示图像中各个像素点的灰度级,纵坐标表示具有该灰度级的像素个数。


    开始学习openCV第五课,主要学习来源:
    [Python图像处理] 十一.灰度直方图概念及OpenCV绘制直方图

    谢谢大神的分享!

     

     

    展开全文
  • 本文介绍了OpenCV-Python对比度受限自适应直方图均衡变换的CLAHE类及其方法,并通过代码介绍了相关方法的使用。在单图像的对比度受限自适应直方图均衡时,只需要使用createCLAHE创建CLAHE对象,然后调用该对象apply...

    一、引言

    对比度受限的自适应直方图均衡在OpenCV中是通过类CLAHE来提供实现的,老猿没研究过C++中的应用,但OpenCV-Python中应用时与普通的Python类构建对象的机制有所不同,老猿做了相关测试,在此简单介绍一下。

    二、CLAHE类及方法介绍

    2.1、简介

    CLAHE类是OpenCV中进行对比度受限的自适应直方图均衡的基类,其类继承关系如下:
    在这里插入图片描述
    其父类和子类老猿没有研究过,在此就不展开介绍。

    该类有2个重要属性:

    • tilesGridSize:图像被分成称为“tiles”(瓷砖、地砖、小方地毯、片状材料、块状材料)的小块,在OpenCV中,tilesGridSize默认为8x8 ,即整个图像被划分为8纵8横共64块。然后对每一个块进行直方图均衡处理
    • clipLimit:裁剪限制,此值与对比度受限相对应,对比度限制这个参数是用每块的直方图的每个bins的数和整图的平均灰度分布数的比值来限制的。 裁剪则是将每块图像直方图中超过ClipLimit的bins多出的灰度像素数去除超出部分,然后将所有bins超出的像素数累加后平均分配到所有bins。具体算法老猿将在研究清楚后单独介绍。

    2.2、成员方法简介

    2.2.1、apply方法

    apply方法用于对图像应用对比度受限自适应直方图均衡变换处理。
    调用语法dst = cv.CLAHE.apply( src[, dst] )
    参数说明

    • src:输入图像,图像类型为CV_8UC1 or CV_16UC1,即8位或16位灰度图
    • dst:输出图像,类型同输入图像

    补充说明:在进行该方法调用前,必须已经设置了对比度受限自适应直方图均衡算法的受限对比度ClipLimit以及图像分块的行数和列数tiles

    2.2.2、collectGarbage方法

    collectGarbage方法应该是进行内存垃圾回收的,没有参数和返回值,老猿认为由于Python的内存管理机制,该方法没有什么意义,同时测试没有发现执行该方法起何作用,因此很可能是个无用的方法。

    2.2.3、getClipLimit方法

    getClipLimit方法是用于获取当前CLAHE对象设置的ClipLimit值返回。
    调用语法retval = cv.CLAHE.getClipLimit()

    2.2.4、getTilesGridSize方法

    getClipLimit方法是用于获取当前CLAHE对象设置的tilesGridSize返回。
    调用语法retval = cv.CLAHE.getTilesGridSize()

    2.2.5、setClipLimit方法

    方法是用于设置当前CLAHE对象的ClipLimit值,无返回值。

    调用语法None = cv.CLAHE.setClipLimit( clipLimit )

    2.2.6、setTilesGridSize方法

    方法是用于设置当前CLAHE对象的tilesGridSize值,无返回值。

    调用语法None = cv.CLAHE.setTilesGridSize( tileGridSize )

    三、CLAHE对象的构建

    3.1、CLAHE构造方法研究

    从上面的方法介绍中,没有看到CLAHE的构造方法,在OpenCV文档中,确实没有这个CLAHE的构造方法,在Python的CLAHE.py模块中,有该类的构造方法的定义:

    def __init__(self, *args, **kwargs): # real signature unknown
        pass
    

    没有任何参数的说明,在老猿找到的该类的C++类的构造方法如下:

    int CLAHE(kz_pixel_t* pImage, unsigned int uiXRes, nsigned int uiYRes, kz_pixel_t Min,      kz_pixel_t Max, unsigned int uiNrX, unsigned int uiNrY, unsigned int uiNrBins, float fCliplimit);
    

    老猿以C++构造方法为依据构建了Python中的CLAHE类,构造方法确实返回了CLAHE对象,但以此调用相关方法全部出现代码异常退出。基本上说明OpenCV-Python中CLAHE的构造方法不可用,至于C++中是否能使用,老猿没有去研究。

    3.2、createCLAHE函数

    由于OpenCV-Python中CLAHE的构造方法无法使用,同时在OpenCV中,提供了单独的全局函数createCLAHE,因此OpenCV-Python中CLAHE对象的构建必须通过createCLAHE函数。

    调用语法retval = cv.createCLAHE( clipLimit=40,tileGridSize=(8,8))
    参数及返回值说明:clipLimit、tileGridSize请参考前面关于类的介绍,返回值为创建的类对象,该对象的clipLimit、tileGridSize由createCLAHE函数的参数指定。

    四、示例代码

    下面的代码使用OpenCV-Python对读入的图像进行对比度受限自适应直方图均衡处理:

    import cv2
    def testLocalHistEqu():
        img = readImgFile(r'f:\pic\valley.png', True)
        
        print('\033[31m老猿Python网址:\033[34mhttps://blog.csdn.net/LaoYuanPython\033[0m,同名微信公众号:\033[34m老猿Python')
    
        clahe = cv2.createCLAHE(clipLimit=200, tileGridSize=(5, 5))
      
        cl2 = clahe.getClipLimit()
        clahe.setClipLimit(20)
        cl1 = clahe.getClipLimit()
        clahe.setTilesGridSize((8,8))
    
        imgEquA = clahe.apply(img)
    

    上面的代码中创建CLAHE对象后,对对象的属性进行了读写操作,其实这些代码完全没有必要。

    五、小结

    本文介绍了OpenCV-Python对比度受限自适应直方图均衡变换的CLAHE类及其方法,并通过代码介绍了相关方法的使用。在单图像的对比度受限自适应直方图均衡时,只需要使用createCLAHE创建CLAHE对象,然后调用该对象apply方法就可以完成对比度受限自适应直方图均衡处理,该类的其他方法用处不大,但如果是要进行多次对比度受限自适应直方图均衡处理,且需要设置不同的分块数和受限阈值,则可以通过提供的方法直接修改对象属性再进行均衡处理即可。

    更多图像直方图处理的内容请参考《《数字图像处理》第三章学习总结感悟2:直方图处理》的介绍。

    更多图像处理的内容请参考专栏《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》、《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》及《图像处理基础知识》的介绍。

    如对文章内容存在疑问,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询。

    写博不易,敬请支持:

    如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

    关于老猿的付费专栏

    1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
    2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
    3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录
    4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

    前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

    对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

    如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

    老猿Python,跟老猿学Python!

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython

    展开全文
  • 本文详细介绍了OpenCV-Python图像直方图计算calcHist函数的语法以及使用案例,希望这些介绍有助于大家详细了解OpenCV-Python图像直方图计算的方法。

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython

    一、引言

    在《《数字图像处理》第三章学习总结感悟2:直方图处理: https://blog.csdn.net/LaoYuanPython/article/details/119856466》相关的文章中介绍了直方图均衡、直方图匹配、局部直方图处理、基于直方图统计信息进行图像增强处理等图像处理与直方图相关的内容,由此可见直方图在OpenCV中大有用途,因此OpenCV中也提供了直方图计算的函数calcHist,这个函数在网上介绍的很多,不过都是基于C语言的,对OpenCV-Python版本介绍得不多,本文就该函数OpenCV-Python版本详细说明一下。

    二、OpenCV图像直方图的计算

    在OpenCV中,图像的直方图计算使用函数calcHist,在C语言中,该函数有多种重载形式,参数也比较多,而在Python中则不一样。

    下面是C++版本的calcHist一个重载函数:

    void cv::calcHist	(	const Mat * 	images,
    int 	nimages,
    const int * 	channels,
    InputArray 	mask,
    OutputArray 	hist,
    int 	dims,
    const int * 	histSize,
    const float ** 	ranges,
    bool 	uniform = true,
    bool 	accumulate = false 
    )
    

    相关介绍网上到处都是,在此就不展开说,而OpenCV-Python关于该函数的资料却很少见,有的也基本是官方文档的简单翻译,下面就calcHist的Python版本介绍一下。

    Python中因为不支持函数的多态形式,因此只有一个函数,其定义如下:

    hist	=	cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
    

    这些参数说明如下:

    • images:输入图像的列表,如果有多幅图像,则是列表的多个元素,但根据老猿测试,4.3的版本虽然允许输入多个图像,但处理时只处理一幅图像才能正常处理
    • channels:需要处理通道的列表,需要统计的通道索引:维度通道序列,第一幅图像的通道标号从0~image[0].channels( )-1。Image[0]表示图像数组中的第一幅图像,channels()表示该图像的通道数量。同理,图像阵列中的第二幅图像,通道标号从image[0].channerls( )开始,到image[0].channerls+image[1].channels( )-1为止;第三、四幅图像的通道标号顺序依此类推;也就是说图像阵列中的所有图像的通道根据图像排列顺序,排成一个通道队列,根据老猿测试,这个多通道支持也基本不可用
    • mask:图像掩膜,是和图像大小相同的8bit灰度图像矩阵,如果只计算输入图像部分区域的直方图时,可通过掩膜来设置参与计算的有效区域(掩膜有效区域的像素值非0)
    • histSize:每个图像维度参与直方图计算的直方图组数
    • ranges:为一个列表,表示参与直方图计算的每个维度的数值范围,即横坐标的最小值和最大值,注意最小值是参与计算的最小值,最大值本身不参与计算,即这个最小值和最大值构成的区间是个半闭半开区间,如要求灰度图的所有像素值都参与计算,则值为[0,256],如果要求计算灰度值在100-250的像素值,则应该设置为[100,251],如果是多个维度,则每个维度的计算范围最小、最大值分别追加到列表中,如有2个维度,都是0到256,则表示为:[0,256,0,256]
    • hist:可选输出结果直方图阵列
    • accumulate:是否累积计算标记,如果设置为True,则直方图在计算时不会将结果清除,此功能能够从多组图像中叠加计算出一个直方图,经老猿验证,OpenCV4.3-Python中好像不起作用

    可以看到相比C++版本,python版本变化如下:

    • 参数少了nimages,因为images就是一个列表,无需再传图像数量
    • 参数少了dims,因为数字图像一般就一个物理量-灰度,因此在Python中dims默认为1,不能传值
    • 参数少了uniform,这表示是否为均匀直方图,Python中强制为均匀直方图
    • range参数比C++用法中少了非均匀直方图的表示法

    三、直方图计算简单案例

    下面构造一个简单的图像数组,来进行直方图的计算,看看计算出来的直方图数据:

    import cv2
    def test():
        img = np.array([[[1,2,3],[1,2,3],[1,2,3]],[[4,5,6],[4,5,6],[4,5,6]],[[7,8,9],[7,8,9],[7,8,9]]],dtype=np.uint8)
        B, G, R = cv2.split(img)
        hb = cv2.calcHist([B], [0], None, [9], [1,10],accumulate=True)
        hg = cv2.calcHist([G], [0], None, [9], [3, 8],accumulate=True)
        hr = cv2.calcHist([R], [0], None, [9], [1, 5], accumulate=True)
        print("蓝色通道的直方图矩阵如下:")
        print(hb.shape,hb.reshape(hb.shape[0]))
        print("绿色通道的直方图矩阵如下:")
        print(hg.shape, hg.reshape(hg.shape[0]))
        print("红色通道的直方图矩阵如下:")
        print(hr.shape, hr.reshape(hr.shape[0]))
        
    test()
    

    上段程序首先构建了3*3的BGR格式的图像矩阵,像素值每个通道由1-9中的数字构成。使用cv2.split做了各像素的三通道拆分,拆分后三通道的像素值如下:
    B通道
    在这里插入图片描述
    G通道
    在这里插入图片描述
    R通道
    在这里插入图片描述
    然后分别计算三个通道的直方图数据,注意B通道指定的范围是[1,10],G是[3,8],R是[1,5],三者中绿色通道指定组数是6,其他2个通道指定的组数是9。我们来看看最终输出结果:

    蓝色通道的直方图矩阵如下:
    (9, 1) [3. 0. 0. 3. 0. 0. 3. 0. 0.]
    绿色通道的直方图矩阵如下:
    (6, 1) [0. 0. 3. 0. 0. 0.]
    红色通道的直方图矩阵如下:
    (9, 1) [0. 0. 0. 0. 3. 0. 0. 0. 0.]
    

    可以看到直方图的矩阵是一个组数×1的二阶数组。

    蓝色通道中1、 4、 7三个数字各自出现了三次,组设设置ranges设置为【1-10】,组数设置为9,由于上限10不参与计算,因此一个数字就是一个组,1、 4、 7三个数字分别在0组、3组和6组,因此直方图数组展开后的最终结果是[3. 0. 0. 3. 0. 0. 3. 0. 0.]。

    绿色通道中2、 5、 8三个数字各自出现了三次,组设设置ranges设置为【3-8】,组数设置为6,由于上限8不参与计算,实际参与直方图计算的数字是3、4、5、6、7共5个,因此2、 5、 8三个数字实际上只有5能纳入直方图统计中,分为6组后,每组的宽度为(8-3)/6=0.833,5在第3组(组号2),因此数组展开后的最终结果是[0. 0. 3. 0. 0. 0.]。

    类似地,红色通道中3、 6、 9三个数字各自出现了三次,组设设置ranges设置为【1-5】,组数设置为9,由于上限5不参与计算,实际参与直方图计算的数字是1、2、3、4共5个,因此3、 6、 9三个数字实际上只有3能纳入直方图统计中,分为9组后,每组的宽度为(5-1)/9=0.444,3在第5组(组号4),因此数组展开后的最终结果是[0. 0. 0. 0. 3. 0. 0. 0. 0.]。

    **从上面的结果可以看到,参数accumulate=True没有起到作用。**不知道老猿的测试方法是否存在问题。

    四、小结

    本文详细介绍了OpenCV-Python图像直方图计算calcHist函数的语法以及使用案例,希望这些介绍有助于大家详细了解OpenCV-Python图像直方图计算的方法。

    本文相关内容其实已经在《OpenCV-Python图像直方图计算calcHist函数详解、示例及图形呈现》中介绍,且该文中还有更多内容,但该文人气不足,老猿就简化了标题和内容,看能否有所改观。

    更多图像直方图处理的内容请参考《《数字图像处理》第三章学习总结感悟2:直方图处理》的介绍。

    更多图像处理请参考专栏OpenCV-Python图形图像处理》及《图像处理基础知识》的介绍。

    对于缺乏Python基础的同仁,可以通过老猿的免费专栏《 专栏:Python基础教程目录》从零开始学习Python。

    如对文章内容存在疑问,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询,可通过扫博客左边的二维码加微信公众号。

    写博不易,敬请支持:

    如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

    关于老猿的付费专栏

    1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
    2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
    3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录
    4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

    前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

    对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

    如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

    老猿Python,跟老猿学Python!

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython

    展开全文
  • # 定义一个计算灰度直方图的函数 h, w = I.shape[:2] ############## 输出的是图像的长宽 grayHist = np.zeros([256], np.uint64) #256个灰度级 # zeros(shape, dtype=float, order='C') #
  • OpenCV-Python直方图均衡化

    千次阅读 2018-04-12 14:27:41
    OpenCV 直方图均衡化 直方图 直方图相关术语 BINS DIMS RANGE OpenCV中直方图的计算 Numpy中直方图的计算 绘制直方图 1. 使用Matplotlib 2. 使用OpenCV 应用遮罩 直方图均衡化 直方图均衡化算法 Numpy中的...
  • 1. 绘制图像的直方图   下面的程序给出了如何绘制一幅图像整体的直方图和每个通道的直方图 #-*- coding:utf-8 -*- import cv2 from matplotlib import pyplot as plt def whole_hist(image): ''' 绘制整幅图像...
  • Opencv-python 直方图均衡化(亮度提升) import cv2 as cv original = cv.imread("./sunrise.jpg") print(original.shape) cv.imshow("original", original) # 灰度图 gray = cv.cvtColor(original, cv.COLOR_BGR2...
  • 如何画图像直方图 https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_histograms/py_histogram_begins/py_histogram_begins.html#histograms-getting-started 和...
  • import cv2 import numpy as np import matplotlib.pyplot as plt ... # 计算灰度直方图 h, w = I.shape[:2] grayHist = np.zeros([256], np.uint64) for i in range(h): for j in range(w): grayHist[I[i][j]]
  • 对彩色图像进行直方图均衡化时,先将图像从RGB空间转到YUV空间,然后对亮度Y通道进行直方图均衡化得到通道Y",然后将Y"UV通道进行合并。代码如下: import cv2 import numpy as np img = cv...
  • Python+OpenCV)绘制灰度直方图

    千次阅读 2020-11-29 17:15:58
    绘制单通道直方图和RGB三通道直方图。 IDE:Jupyter Lab #!/usr/bin/env python # coding: utf-8 # In[13]: import sys import cv2 as cv import matplotlib.pyplot as plt # In[14]: print('Python的...
  • 直方图是什么?你可以将直方图视为图形或绘图,它可以让你全面了解图像的强度分布。它是在X轴上具有像素值(范围从0到255,并非总是)的图和在Y轴上的图像中的对应像素数。 这只是理解图像的另一种方式。通过查看...
  • OpenCV 直方图均衡化 直方图 直方图相关术语 BINS DIMS RANGE OpenCV中直方图的计算 Numpy中直方图的计算 绘制直方图 1. 使用Matplotlib 2. 使用OpenCV 应用遮罩 直方图均衡化 直方图均衡化算法 Numpy中的...
  • OpenCV-Python小白进阶之灰度转化、分离RGB与直方图显示 文章目录OpenCV-Python小白进阶之灰度转化、分离RGB与直方图显示条件转化为灰度图函数:代码实现分离RGB函数代码实现直方图显示函数代码实现 条件 环境:...
  • img = cv2.imread("灰度图.jpg", 0) h, w = img.shape[:2] ############## 输出的是图像的长宽 pixelSequence = img.reshape([h * w, ]) numberBins = 256 histogram, bins, patch = plt.hist(pixelSequence, ...
  • # 读取图片 src = cv.imread("Fig0326(a)(embedded_square_noisy_512).tif") # 转化为灰度图 gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) # 显示灰度图 cv.imshow("gray image", gray) # 绘制直方图 plt.hist(gray...
  • 图像的灰度直方图(histogram),就是将图像转化成灰度图像之后,统计各个像素点的灰度值,绘制成直方图,其横轴是灰度值(0,255),纵轴是该灰度值所对应的像素的数目。对灰度直方图做积分=图像的size。灰度直方图...
  • Otsu’s可以找到一个最好的阀值 注意plt.hist()直方图,是一维,则需要用ravel来将三维数据转化为一维 import cv2 import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.family'] = ['sans-...
  • 在本章中,我们将学习直方图反投影。 理论 这是由Michael J. Swain和Dana H. Ballard在他们的论文《通过颜色直方图索引》中提出的。 用简单的话说是什么意思?它用于图像分割或在图像中查找感兴趣的对象。简而言之,...
  • Opencv3教程】Opencv-python入门篇(二)直方图均衡化直方图均衡化:1 直方图:2 直方图均衡化的原理:3 直方图均衡化的 python 实现:4 自适应直方图均衡化: 直方图均衡化: 1 直方图: 对于灰度图,直方图用于...
  • 灰度直方图概括了图像的灰度级信息,简单的来说就是每个灰度级图像中的像素个数以及占有率,创建直方图无外乎两个步骤,统计直方图数据,再用绘图库绘制直方图。统计直方图数据首先要稍微理解一些与函数相关的术语,...
  • 本文详细介绍了OpenCV-Python图像直方图计算calcHist函数的语法以及使用案例,从几个测试案例可以看出OpenCV-Python直方图计算比C语言版本功能还是差的比较多。最后介绍了一个使用matplotlib画出直方图的完整案例...
  • OpenCV-Python之图像直方图的绘制

    千次阅读 2018-11-10 09:49:17
    图像的直方图是用来表现图像中亮度分布的直方图,给出的是图像中某个亮度或者某个范围亮度下共有几个像素,即统计一幅图某个亮度像素数量。 b i n s i z e = 图 像 中 不 同 像 素 值 的 个 数 b i n 的 数 目 bin...
  • 图像的直方图反映的是图像像素值的统计特征,比如一个CV_8U类型的图像,表示的是其在0~255的256种数值的分布情况。我们可以将统计“颗粒度”划分在每一个像素值上,当然统计区间也可以不必在每一个像素值上划分,也...
  • OpenCV--Python 图像增强

    千次阅读 2019-06-06 20:07:18
    图像增强主要解决由于图像的灰度级范围较小造成的对比度较低的问题,目的就是将输出...1.灰度直方图 2.线性变换 3.直方图正规化 4.伽马变换 5.全局直方图均衡化 7.总结 对比度增强只是图像增强方法中的一种手...
  • 图像分割是许多计算机视觉应用中的关键处理步骤,通常用于将图像划分为不同的区域,这些区域常常对应于...在本文中,将介绍 OpenCV 所提供的主要阈值技术,可以将这些技术用作计算机视觉应用程序中图像分割的关键部分。
  • 学习OpenCV-Python——图像增强

    千次阅读 2018-11-18 01:12:52
    图像增强 图像增强可以分为两种: 领域处理技术。对像素点及其周围的点进行处理,即使用卷积核。 点处理技术。只对单个像素进行处理。...alpha: 归一化后灰度像素最小值,一般为0 beta: 归一化后灰...
  •   直方图统计的是图像内各个灰度级出现的次数。 直方图的绘制 1.使用pyplot绘制直方图   使用函数:matplotlib.pyplot.hist(X, BINS) X 和 BINS 的参数如下:   X:数据源,必须是一维的。对于通常的二维图像...
  • OpenCV--021:直方图规定化

    千次阅读 2019-09-22 17:04:45
    就是通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图。所以直方图修正的关键就是灰度映像函数。 直方图规定化是用于产生处理后有特殊直方图的图像方法。 直方图均衡化能自动增强图像的整体对比度,但是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,597
精华内容 1,438
关键字:

opencv-python灰度直方图

python 订阅