Opencv中的cv2.calcHist()函数的作用及返回值说明
作者:S.C.Dragon 发布时间:2021-03-26 10:27:56
在讨论其返回值前,我们先来介绍以下calcHist()函数的用法:
cv2.calcHist()函数
cv2.calcHist()函数的作用
通过直方图可以很好的对整幅图像的灰度分布有一个整体的了解,直方图的x轴是灰度值(0~255),y轴是图片中具有同一个灰度值的点的数目。
而calcHist()函数则可以帮助我们统计一幅图像的直方图
cv2.calcHist(images,channels,mask,histSize,ranges)
images
: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img]channels
: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色 图像 的传入的参数可以是 [0][1][2] 它们分别对应着 BGR。mask
: 掩模图像。统整幅图像的直方图就把它为 None。但是如果你想统图像某一分的直方图的你就制作一个掩模图像并使用它。histSize
:BIN 的数目。也应用中括号括来BINS
: 上面的直方图显示了每个像素值的像素数,即从0到255。即您需要256个值才能显示上述直方图。但是请考虑一下,如果您不需要单独查找所有像素值的像素数,而是在像素值间隔内查找像素数,该怎么办?例如,您需要找到介于 0 到 15 之间的像素数,然后是 16 到 31、...、240 到 255。您只需要 16 个值来表示直方图。因此,只需将整个直方图拆分为 16 个子部分,每个子部分的值就是其中所有像素计数的总和。这每个子部分都称为"BIN"。在第一种情况下,条柱数为256(每个像素一个),而在第二种情况下,它只有16。BINS 在 OpenCV 文档中由术语histSize表示。
ranges
: 像素值范围常为 [0 256]
示例:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('cat.jpg', 0) # 0表示灰度图
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
# print(hist)
# print(hist[175])
# print(type(hist))
plt.hist(img.ravel(),256);
#print(img.ravel())
plt.show()
输出结果:
示例2:多通道图的“直方图”
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('cat.jpg')
color = ('b','g','r')
for i,col in enumerate(color):
histr = cv2.calcHist([img],[i],None,[256],[0,256])
plt.plot(histr,color = col)
plt.xlim([0,256])
print(i,col)
输出结果:
到这里完整的直方图就这样子绘制出来了,但是大家也许会对calcHist的返回值有疑问,到底返回了什么才能画出来这样的图像呢?下面我们则来讨论该函数的返回值
cv2.calcHist()函数的返回值
对于hist = cv2.calcHist([img],[0],None,[256],[0,256])中,hist是一个256*1的矩阵,每一个值代表了每个灰度值对应的像素点数目
print(type(hist))
<class 'numpy.ndarray'>
输出的结果表示这是一个多维数组
print(hist)
[[1.000e+00]
[0.000e+00]
[2.000e+00]
[0.000e+00]
.......
[2.010e+02]
[2.180e+02]
[2.160e+02]
[2.660e+02]
[3.350e+02]
[3.110e+02]
[4.670e+02]]
经计算,共有256个值,即可以输出hist[0]到hist[255]。
整个hist[i]则表示灰度值
print(hist[175],hist[255])
[3181.] [467.]
通过直方图可看出输出的结果就是每一个灰度值对应的像素数目
来源:https://blog.csdn.net/star_sky_sc/article/details/122371392


猜你喜欢
- 导语不少人在生活中都有抠人像图换背景的需求。那怎么抠图呢?相信不少人第一时间就想到了 PS 抠图 * ,为了学会 PS 抠图很多人还花费不少精
- ASP的强大不仅仅局限于接受和显示的交互,更多的是运用ActiveX 组件进行更强大的Web应用。那究竟ActiveX组件为何物?
- 一、简介此模块用于简化paramiko与网络设备之间的ssh连接,可在windows与Unix平台使用 二、目前支持的设备(201
- 情况1:在一个目录下面只有文件,没有文件夹,这个时候可以使用os.listdir在我们的桌面上有一个file目录(文件夹),里面有三个文件f
- 要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在。在这里使用一个cache存放已
- 1.软件环境??Windows10 教育版64位Python 3.6.3PyAV 8.0.32.问题描述??在提取视频文件的关键内容时,手动
- 描述sorted() 函数对所有可迭代的对象进行排序操作。语法sorted(iterable, key=None, reverse=Fals
- 前言本文做的是基于三层神经网络实现手写数字分类,神经网络设计是设计复杂深度学习算法应用的基础,本文将介绍如何设计一个三层神经网络模型来实现手
- 那是一杠还是两杠呢?最简单的方式就是拿出钱包,掏出张“新”的50或100,翻到背面的银线上,就会发现两杠的符号。这个是以前跟同事在讨论是一杠
- 今天有朋友问到如下一则案例,ORA-01114,ORA-27067以及OSD-04026错误同时出现:*** ACTION NAME:()
- 先上一张效果图:以前用angularjs操作基本上都是要取到每个列表的id再循环判断是不是当前点击的列表来显示折叠。今天在这个项目 http
- 文件操作我们可以使用python来操作文件,比如读取文件内容、写入新的内容等,因为任何计算机文件的本质都是一些有不同后缀的字符组成的。pyt
- 目录1.闭包:用函数代替类2.访问定义在闭包的内的变量1.闭包:用函数代替类有时我们会定义只有一个方法(除了__init__()之外)的类,
- 本文转自:https://blog.csdn.net/qq_42730750/article/details/108415551前言 各大
- 一、模块模块可以看成是一堆函数的集合体。一个py文件内部就可以放一堆函数,因此一个py文件就可以看成一个模块。如果这个py文件的文件名为mo
- 有一个ssqdatav2数据,要找到其中的深圳,并且替换成圳。因为收集到的数据出现了错误,本来只有省份简写的地方却出现了深圳。如何找到DF中
- 前言最近忙着开发x省冷链追溯系统,天天干到晚上十一点多才回到家,周末也加班,没啥时间写博客,闲下来再好好写写业务: sql语句统计出入库数据
- 1.决定大小写是否敏感的参数在 MySQL 中,数据库与 data 目录中的目录相对应。数据库中的每个表都对应于数据库目录中的至少一个文件(
- 经常在网上冲浪的朋友是否曾注意到有些网站的鼠标不是规则的斜向上箭头的形状,而是"十"
- 借助zookeeper可以实现服务器的注册与发现,有需求的时候调用zookeeper来发现可用的服务器,将任务均匀分配到各个服务器上去.这样