iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Opencv中的cv2.calcHist()函数的作用及返回值说明
  • 348
分享到

Opencv中的cv2.calcHist()函数的作用及返回值说明

Python 官方文档:入门教程 => 点击学习

摘要

目录cv2.calcHist()函数cv2.calcHist()函数的作用cv2.calcHist()函数的返回值在讨论其返回值前,我们先来介绍以下calcHist()函数的用法:

在讨论其返回值前,我们先来介绍以下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.]

通过直方图可看出输出的结果就是每一个灰度值对应的像素数目

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Opencv中的cv2.calcHist()函数的作用及返回值说明

本文链接: https://www.lsjlt.com/news/171079.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作