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("n1和n2不相等")
else:
print("n1和n2相等")
for i in range(len(n1)):
#   print(n1[i],n3[i])
if n1[i]!=n3[i]:
break
if i<len(n1)-1:
print("n1和n3不相等")
else:
print("n1和n3相等")
我这种判断方法感觉有点傻,网上有其他的判断直方图相似性等的函数,有感兴趣的朋友请自行搜索。

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

(0)

相关推荐

  • 数据分析入门系列教程-常用图表

    作者:周萝卜 来源:萝卜大杂烩 今天我们来学习下数据可视化,其实在前面的章节中,我们也接触到了一些数据可视化的知识,在分析数据集的时候,有效的可视化图表,可以帮助我们更好的了解数据. 常用的可视化图表 ...

  • 我是如何使计算提速>150倍的

    我的原始文档:https://www.yuque.com/lart/blog/lwgt38 书接上文<我是如何使计算时间提速25.6倍>. 上篇文章提到, F-measure使用累计直方图 ...

  • 基于OpenCV的图像强度操作

    重磅干货,第一时间送达 01. 什么是图像强度操作 更改任何通道中的像素值 对图像的数学运算 亮度变化 对比度变化 伽玛操纵 直方图均衡 图像预处理中的滤波等增强 使用OpenCV加载图像 impor ...

  • 基于OpenCV的直方图匹配

    重磅干货,第一时间送达 如何为图像生成直方图,如何使直方图相等,最后如何将图像直方图修改为与其他直方图相似. 01. 什么是图像直方图? 在开始定义直方图之前,为简单起见我们先使用灰度图像,稍后再解释 ...

  • python+opencv图像处理(四十三)

    Luplacian算子 1.Luplacian算子 可以用二阶导数可以用来检测边缘,拉普拉斯算子是线性二阶微分算子. 2.Luplacian算子实现 在 OpenCV 中, 可以用函数Laplacia ...

  • python+opencv图像处理(二十三)

    百分比滤波器 百分比滤波器也称为排序统计滤波器,它基于对模板所覆盖像素的灰度值的排序,然后从排序后的序列中选一个值作为新的像素值. 上篇介绍的中值滤波其实也是百分比滤波器的一种,除了中值滤波以外,最常 ...

  • python+opencv图像处理(四十四)

    童年记忆中的爆米花,小时候只在过年的时候才能吃到,现在偶尔能在路边看到有在爆的,看到了总忍不住想买,虽然味道没什么变化,只是再吃不出来以前的幸福了. 长大了......心也大了...... 可是,实力 ...

  • python+opencv图像处理(四十二)

    Kirsch算子 1.Kirsch算子 Kirsch算子是R.Kirsch提出来一种边缘检测新算法,它采用8个模板对图像上的每一个像素点进行卷积求导数,这8个模板代表8个方向,对图像上的8个特定边缘方 ...

  • python+opencv图像处理(四十一)

    提前过了个万圣节,南瓜灯还蛮好看的,就是那些装鬼的有点吓人...... Scharr算子 1.Scharr算子 Scharr算子也是用于提取图像边缘的. 它是对Sobel算子差异性的增强,两者的原理和 ...

  • python+opencv图像处理(四十)

    Sobel算子  开头来张帅哥...... ----------------------这是严谨的分割线-------------------------- 1.Sobel算子(索贝尔算子) Sobe ...

  • python+opencv图像处理(三十九)

    MSR 又一学期开学季,感觉好久没说过话了,多说一会儿这个嗓子有点儿受不了了,老天啊,救救我吧...或许,我应该去学一门说话艺术之类的课? 之前简单写过Retinex理论以及单尺度SSR. 今天要写的 ...

  • python+opencv图像处理

    python+opencv图像处理(一)读入和显示图片 python+opencv图像处理(二)图像变换 python+opencv图像处理(三)彩色图像拆分与合并 python+opencv 图像处 ...

  • python+opencv图像处理(三十八)

    Retinex理论 最近研究了下Retinex,这个算法用的地方还挺多的,较多是用在水下图像或者去雾等,还没有研究得太清楚,先做个笔记 . Retinex是Edwin.H.Land于1963年提出的建 ...