目录

一、灰度直方图概念

二、直接调用opencv的函数caclHist()

1、函数介绍

2、实例

(1)绘制全局直方图

(2)绘制局部的直方图

三、自定义函数进行灰度直方图的绘制

1、代码

2、结果



一、灰度直方图概念

灰度直方图是关于灰度级分布的函数,将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。其中,横坐标是灰度级,纵坐标是该灰度级出现的频率。

对图像中不同灰度级别出现的次数进行统计,统计后进行绘制直方图,横坐标表示灰度级别0-255,纵坐标表示每个灰度级别在图像中出现的次数,一般会对次数进行归一化,用每个灰度级出现的次数除以图像的像素总个数。

二、直接调用opencv的函数caclHist()

1、函数介绍

返回的是一个一维数组(256,1)

hist = cv2.calcHist([images],[channels],mask,histSize,ranges )
参数说明:
images:uint8或float32类型的原图像。用方括号表示,即“[img]”;
channels:计算直方图的通道索引,也在方括号中给出.例如,如果输入是灰度图像,则其值为[0].对于彩色图像,可以通过[0],[1]或[2]分别计算蓝色,绿色或红色通道的直方图.
mask:掩码,蒙版图像.要查找完整图像的直方图,它将显示为“无”.但是,如果要查找图像特定区域的直方图,则必须为其创建蒙版图像并将其作为蒙版.
histSize:灰度级的个数,这代表我们的BIN计数.需要在方括号中给出.对于满量程,我们通过[256].
ranges:这是像素值的范围的范围。通常,它是[0,256].

2、实例

(1)绘制全局直方图

获得上图的直方图,首先得先进行灰度化

import cv2
import numpy as np
import matplotlib.pyplot as pltdef image_calcuhist(imagepath):img = cv2.imread(imagepath)#读取图片img_shape = img.shapegray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#灰度化hist = cv2.calcHist([gray],[0],None,[256],[0,256])#计算灰度级别出现频率,返回的是一个(256,1)的数组for i in range(hist.shape[0]):hist[i] = hist[i]/(img_shape[0]*img_shape[1])#对获得的直方图数据进行归一化return histif __name__ == '__main__':x = np.linspace(0,255,256)#横坐标灰度级别y = image_calcuhist("colorful_lena.jpg")#纵坐标值获取plt.bar(x,y.ravel(),0.9,alpha=1,color='b')#通过matplotlib进行直方图的绘制plt.show()#显示直方图

(2)绘制局部的直方图

import cv2
import numpy as np
import matplotlib.pyplot as pltimg = cv2.imread("colorful_lena.jpg",0)
h,w = img.shape#构建一个掩模,需要绘制直方图的局部图像区域的像素设置为255,其他部分设置为0
mask = np.zeros((h,w),np.uint8)
for i in range(0,int(h/2)):for j in range(0,int(w/2)):mask[int(h/4)+i,int(w/4)+j] = 255#全幅图像的直方图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
#局部的直方图
hist1 = cv2.calcHist([img],[0],mask,[256],[0,256])
x = np.linspace(0,255,256)
plt.plot(x,hist.ravel())
plt.plot(x,hist1.ravel())
plt.show()
cv2.imshow('',mask)
cv2.imshow('1',img)
cv2.waitKey(0)

蓝色线为全局直方图,橙色为局部直方图

三、自定义函数进行灰度直方图的绘制

1、代码

# 1 0-255 2 概率
# 本质:统计每个像素灰度 出现的概率 0-255 p
import cv2
import numpy as np
import matplotlib.pyplot as pltdef image_histdefinition(imagepath):img = cv2.imread(imagepath)#读取图片imgInfo = img.shape#获得图片的尺寸大小height = imgInfo[0]width = imgInfo[1]# 灰度化gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)count = np.zeros(256,np.float) # 共256个,创建一个数组用于存放灰度级别出现的频率#计算灰度级别频率for i in range(0,height):for j in range(0,width):pixel = gray[i,j] # 获取灰度等级index = int(pixel) # 强制类型转换count[index] = count[index]+1# 计算出现概率,即归一化for i in range(0,255):count[i] = count[i]/(height*width)return countif __name__ == '__main__':# 绘图x = np.linspace(0, 255, 256)count = image_histdefinition('colorful_lena.jpg')y = countplt.bar(x, y, 0.9, alpha=1, color='b')plt.show()

2、结果

两种方法得到的直方图是一样的,证明方法是可行的。

【图像处理】——图像灰度直方图的绘制(直接调用函数和自定义函数)相关推荐

  1. RGB图像灰度直方图的绘制

    一.描述 一幅图像的整个直方图我们一般不难画,本篇分享一下三通道分开的灰度直方图,包含三个分开的和三个画在一起的. 二.代码编写 三通道灰度直方图绘制代码(含解释)Opencv中的cv2.calcHi ...

  2. MATLAB实现图像灰度直方图

    (近期有用到灰度直方图的情况,就稍微做了一点点小总结,第一次总结,借鉴了很多博主的文章,下面会码出链接,膜拜大佬~) 1. 图像灰度直方图 灰度直方图是将数字图像中所有像素按灰度值的大小,统计每种像素 ...

  3. [Python从零到壹] 五十一.图像增强及运算篇之图像灰度直方图对比分析万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. 1数字图像获取:1.2图像灰度直方图

    ----------1图像灰度直方图的概念------ 灰度直方图是反映一幅图像中各灰度级像素出现的频率与灰度级的关系.以灰度级为横坐标,频率为纵坐标绘制频率同灰度级的关系图就是一副灰度图像的直方图. ...

  5. Matlab中的histeq函数——图像灰度直方图均衡化

    首先来看一下没有进行灰度直方图均衡化的图片和经过灰度直方图均衡化后的图片的对比: 左为原图,右为经过灰度直方图均衡化处理后的图片,很显然,经过处理之后的图片在对比度方面有了显著的提升,下面附上两张图片 ...

  6. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(构建自定义函数配置显示均值、标准偏差)实战

    R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(构建自定义函数配置显示均值.标准偏差)实战 目录

  7. [Python图像处理] 十一.灰度直方图概念及OpenCV绘制直方图

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  8. 数字图像处理(15): 灰度直方图(matplotlib 和OpenCV 绘制直方图)

    目录 1 灰度直方图简介 1.1 灰度直方图概念 1.2 灰度直方图作用 1.3 绘制的直方图 1.4 归一化直方图 2 matplotlib库 绘制直方图-hist() 3 OpenCV库 绘制直方 ...

  9. CUDA精进之路(三):图像处理——图像灰度化、灰度直方图统计

    引言 在大部分的图像处理程序中,其中必不可少的一步就是对传入的彩图进行灰度处理,将三个通道的RGB图片转化为单通道的Gray图,而对于灰度图进行直方图统计同样是观察检测图像特征的常用方法.在OpenC ...

最新文章

  1. html表格数据点击事件,如何在iview的table单元格里实现点击事件?
  2. mysql延迟注入br_(原创)安全狗SQL注入绕过思路[sql注入waf绕过][sql注入bypass]
  3. 教程干货——零基础创建简单的在线审批流程
  4. 实验 使用 vivado zedboard GPIO 开关 开控制 LED
  5. java二重循环计数_java的二重循环代码样例
  6. Linux自动化运维第十八课
  7. 蓝桥杯 ADV-98 算法提高 约数个数
  8. 已知背景和物体的均值方差,求最佳分割阈值
  9. Linux下执行程序出现 Text file busy 提示时的处理方式
  10. 微信自动发卡机器人说明
  11. 【高通】【QPST】QCN导入
  12. [Pytorch系列-71]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 使用预训练模型训练pix2pix模型
  13. 量子计算机基地边缘,为什么三体人可以吊打地球文明?记忆继承、思想共享是关键...
  14. allegro设置区域规则
  15. 送礼品的禁忌和注意事项
  16. Docker (四) 容器基本命令
  17. matlab隐函数显化,怎么把隐函数显化
  18. PMP笔记-产品核实、范围核实及质量控制的区别
  19. [521]plt.cm.Spectral
  20. iOS 开发问与答(142-159)

热门文章

  1. 再读《被神化的框架》
  2. 2. Mysql数据库的入门知识
  3. css hack技术整理
  4. Git图形化管理工具
  5. 重载(overload)与重写(override)的区别
  6. 面试题40:数组中只出现一次的数字
  7. ORACLE union order by
  8. Spring_HelloWord
  9. SetProcessWorkingSetSize 函数的骗局
  10. pandaboard ES学习之旅——2 ES环境搭建