opencv入门(五)

[复制链接]
发表于 2026-2-18 15:48:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、直方图

1.1 直方图的根本概念



<hr> 1.2 绘制直方图

利用matplotlib(第三方python库)提供的绘制直方图的模块

注意:利用 matplotlib.pyplot 下函数举行绘制图像时,均必要在末了利用matplotlib.pyplot.show() 举行末了的实现,而且体现图像只管不与cv2.imshow()适用(告急由 cv2.waitKey() 会导致 matplotlib.pyplot.show() 引发非常)。该非常出现的场合为pycharm中设置plot图像独立体现时,非独立时不发生非常
1.2.1 利用第三方库:matplotlib.pyploy中的函数hist():用于绘制直方图

利用 hist() 函数,用于绘制直方图
调用格式:
plt.hist(数据源,灰度级)
函数阐明:
① 数据源:传入的图像对象,必须是 一维数组
② 灰度级:对应图像的灰度级巨细,一样寻常是 256,指 8比特的灰度图 的灰度级[0 255]
③ 利用该函数 不会直接体现其绘制的直方图,需利用 plt.show()方法对直方图举行体现
注:利用ravel()函数可以实现二维数组到一维的转换

  1. import cv2
  2. # 导入第三方库
  3. import matplotlib.pyplot as plt
  4. img = cv2.imread("XXX")
  5. # 使用hist函数统计直方图
  6. plt.hist(img.ravel(),256)
  7. # 用于显示plt所有生成的直方图
  8. plt.show()
  9. cv2.waitKey(0)
  10. cv2.destoryAllWindows()
复制代码
<hr> 1.2.2 利用opencv函数 calcHist():用于盘算得到,(多个或单个)图像中各灰度级对应的 个数序列

利用 calcHist() 函数,用于盘算得到,图像中各灰度级对应的 个数序列
调用格式:
hist = cv2.calcHist(images,channels,mask,histSize,ranges,accumulate)
函数阐明:
① images:原始图像的列表.eg [image_a,image_b]
② channels:指定必要盘算灰度级数量标通道
a) 通道编号必要用列表的情势传入. eg [0]、[1]
b) 输入图像是 灰度图 时,它的值是 [0]
c) 彩色图像 可以是 [0]、[1]、[2]分别对应通道 B、G、R
③ mask:掩码图像
a) 统计整幅图像的直方图,设为None
b) 统计图像某一部门的直方图时,必要掩码图像
注:天生掩码的巨细与原图同等(利用 np.zeros((r,c),np.uint8)天生全零矩阵),只将必要举行直方图统计的地域设置为数值1(利用对opencv地域设置像素的操纵可以实现)。(整个过程类似于ROI的操纵)
④ histSize:BINS的数量,即灰度级的数量
a) 需用列表的情势传入. eg [256]
⑤ ranges:设定必要统计的灰度值的范围
a) 对于8 比特图像设定为,[0,255] (列表的情势)
⑥ accumulate:累计(累积、累加)标识。便是否累计对全部传入图像举行直方图统计盘算
a) 默以为 False
b) 假如被设置为 True,则直方图在开始分配时不会被清零
c) 该参数答应从多个对象中盘算单个直方图,大概用于及时更新直方图
d) 多个直方图的累积结果,用于对一组图像盘算直方图
⑦ hist:直方图结果,返回的是 numpy.ndarray 的对象,其数据结构是一个一维数组(为 n*1 的数组),其值为对应[0,255]各灰度级的像素点个数
  1. import cv2
  2. import numpy as np
  3. dir_ = 'E:\\python_opencv\\images\\test\\2020.9.8\\'
  4. file_name = 'Fig0316(
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表