打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python+opencv图像处理(十三)

直方图

又回到了校园,空气是如此的新鲜,人是如此的少......
心情有点微妙...
看一看窗户外面的天...

直方图,在高中数学里好像就出现了。
它是数值数据分布的图形表示。
Python里,直方图的绘制方法不止一种,先介绍常用的一种。
1、Matplotlib进行直方图绘制
Matplotlib这个包是Python中比较强大的绘图的包,可以绘制包括饼图、条形图、散点图、折线图、面积图、三维图在内的等等等等二维三维图形,等有时间,我再慢慢整理发布。
今天先来画直方图。
matplotlib.pyplot中是用hist()函数来绘制直方图。
绘制直方图时,首先要有数据,hist()函数会自动根据数据和柱子的数目去数每个柱子应该有多少数据,并绘制成图形。
以下图为例来说明:

其代码如下:
import matplotlib.pyplot as plt#要使用matplotlib来绘制,必须先导入此包
import numpy as np
x=np.random.randint(0,100,100)#生成【0-100】之间的100个数据
plt.hist(x,bins=10)#x为要统计的数据,bins表示有多少条柱子
plt.xlabel('x')#x轴标签
plt.ylabel('y')#y轴标签
plt.xlim(0,100)#设置x轴分布范围
plt.show()#显示图形
hist函数各参数如下:(此蓝色部分来源于网络)
hist(x,bins=None,range=None, density=None, bottom=None, histtype='bar',, log=False, color=None, label=None, stacked=False, normed=None)
x: 数据集,最终的直方图将对数据集进行统计bins: 统计的区间分布,即要显示几条柱子range: tuple, 显示的区间,range在没有给出bins时生效density: bool,是否归一化,若为True则归一化显示histtype: 可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar柱形
align: 可选{'left', 'mid', 'right'}之一,默认为'mid',控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认log: bool,默认False,即y坐标轴是否选择指数刻度stacked: bool,默认为False,是否为堆积状图

--------------------------------代码太多,休息一下

--------------------------------我是广告开始的分隔线

--------------------------------我是广告结束的分隔线

--------------------------------接着,来...

2,显示归一化直方图

其代码如下:
import matplotlib.pyplot as plt
import numpy as np
x=np.random.randint(0,100,100)
plt.hist(x,bins=10,color='r',density=True,histtype='bar',rwidth=0.5,align='right')
y=np.random.randint(0,100,100)
plt.hist(y,bins=10,color='b',density=True,histtype='bar',rwidth=0.5)
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(0,100)
plt.show()
例3. 判断两个直方图是否相同

在此图中有三个直方图,比较之后结果如下:

代码如下:
import matplotlib.pyplot as plt
import numpy as np
x=np.random.randint(0,100,100)
n1,bins1,patches1=plt.hist(x,bins=10,color='r',density=True,histtype='bar',rwidth=0.5,align='right')
n2,bins2,patches2=plt.hist(x,bins=10,color='b',density=True,histtype='bar',rwidth=0.5)
y=np.random.randint(0,100,100)
n3,bins3,patches3=plt.hist(y,bins=10,color='g',density=True,histtype='bar',rwidth=0.5)
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(0,100)
plt.show()
for i in range(len(n1)):
#    print(n1[i],n2[i])
    if n1[i]!=n2[i]:
        break
if i<len(n1)-1:
    print("n1n2不相等")
else:
    print("n1n2相等")
for i in range(len(n1)):
 #   print(n1[i],n3[i])
    if n1[i]!=n3[i]:
        break
if i<len(n1)-1:
    print("n1n3不相等")
else:
    print("n1n3相等")
我这种判断方法感觉有点傻,网上有其他的判断直方图相似性等的函数,有感兴趣的朋友请自行搜索。

2、cv.calcHist()也可以画直方图。将在下一篇中介绍。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
matplotlib基础绘图命令之hist
掌握了Matplotlib这两个方法,轻松绘制出漂亮的直方图!
Matplotlib —— (六) 频次直方图、数据区间划分和分布密度
用 Python 生成直方图:你会怎么做?
如何驾驭Matplotlib?<Part1>
python – matplotlib和numpy – 直方图条颜色和规范化
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服