OpenCV-python学习笔记(三)——histograms直方图
文章目录
- histograms直方图
- 1 使用opencv来计算直方图
- 2 grayscale histograms灰度直方图
- 3 color histograms彩色直方图
- 4 彩色二维直方图
- 5 histogram equalization直方图均一化
- 6 histograms and masks带遮罩的直方图
histograms直方图
什么是直方图?
直方图就是描述像素强度intensity的分布图。如果是在RGB空间中,那么这个强度就指代某个像素在特定某一通道的值,一般是0-255。
在制作直方图的时候,X轴可以理解为箱子bin,如果有两个箱子,那么像素值(强度)在[0 128)区间的像素点就落在第一个箱子,[128 255)的像素点就落在第二个箱子。箱子的高度就是像素点的个数。
1 使用opencv来计算直方图
标准公式为
hist = cv2.calcHist(images, channels, mask, histSize, ranges)
channels
是一个列表list格式,list里面装了indexs向量。例如一个RGB的3个通道,分别为[0, 1, 2],如果是一个灰度图grayscale,那么只有一个通道,所以表示为[0]。
histSize
表示把像素值离散化的程度,例如可以把RGB三个通道分别映射成32个子集,此时histSize为[32, 32, 32],这三个数字可以各不相同。
ranges
指定像素值的分布范围,例如RGB图像的像素分布一般是[0, 256],但是其他色彩空间,例如HSV就可能会不一样。
2 grayscale histograms灰度直方图
核心公式如下,注意cv2.calcHist()
里面除了mask
其他都是列表的数据格式。
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
hist = cv2.calcHist([image], [0], None, [256], [0,256])
plt.figure()
plt.plot(hist)
3 color histograms彩色直方图
绘制各个通道的彩色直方图
# 首先进行通道分离
channels = cv2.split(image)
colors = ("blue", "green", "red")
# 分别对BGR三个通道画直方图
for (channel, color) in zip(channels, colors):hist cv2.calcHist([channel], [0], None, [256], [0,256])plt.plot(hist, color = color)
4 彩色二维直方图
fig = plt.figure()
# 新建一个操作句柄
ax = fig.add_subplot(131)
hist = cv2.calcHist([channel[1],channel[0]], [0,1], None, [32,32], [0,256,0,256])
p = ax.imshow(hist, interpolation = "nearest")
ax.set_title("2D color histograms for Green and Blue")
plt.colorbar(p)ax = fig.add_subplot(132)
...print("2D histogram shape is {}, with {} values".format(hist.shape, hist.flatten().shape[0]))
5 histogram equalization直方图均一化
# 这个只是直方图的均一化,并不涉及图像的改变
eq = cv2.equalizeHist(image)
cv2.imshow("histogram equalization", np.hstack([iamge, eq]))
可以看到,原来图像的颜色相对集中在中等亮度段,而现在的图像白色和黑色部分增多(即对比度增强)。
6 histograms and masks带遮罩的直方图
首先创建遮罩
# 创建画布
mask = np.zeros(image.shape[:2], dtype = "uint8")
# 画出一个白色填充的矩形
cv2.rectange(mask, (15,15), (130,100), 255, -1)
cv2.imshow("mask", mask)
接着将遮罩覆盖到原来的图像上
# 将遮罩和图像做加的位运算
masked = cv2.bitwise_and(image, image, mask = mask)
cv2.imshow("applying the mask", masked)
最后计算遮罩区域的直方图
# 直接调用函数
plot_histogram(image, "histogram for masked image", mask = mask)
被调用函数为
def plot_histogram(image, title, mask = None):channel = cv2.split(image)colors = ("b","g","r")plt.figure()plt.title(title)for (channel, color) in zip(channels, colors):hist = cv2.calcHist([channes], [0], mask, [256], [0,256])plt.plot(hist, color = color)plt.xlim([0,256])
OpenCV-python学习笔记(三)——histograms直方图相关推荐
- Python学习笔记三之编程练习:循环、迭代器与函数
Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...
- opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影
基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 直方图基础讲解: opencv学 ...
- 【懒懒的Python学习笔记三】
在上一章中,我们学习了如何创建列表.访问列表元素和简单的列表排序.那么在本章中,我们将进一步学习如何遍历整个列表和对列表更多的操作. 一.遍历列表 我们经常需要遍历整个列表,对每个元素执行相同的操作, ...
- Python学习笔记三
参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 一.函数的定 ...
- Python学习笔记三(文件操作、函数)
一.文件处理 1.文件打开模式 打开文本的模式,默认添加t,需根据写入或读取编码情况添加encoding参数. r 只读模式,默认模式,文件必须存在,不能存在则报异常. w 只写模式,若文件不存 ...
- openCV Python学习笔记(二)画几何
此处要花几何图形,我们需要用到如下几个函数: cv2.line 画线函数 cv2.circle 画圆函数 cv2.ellipse 画椭圆 cv2.rectangle 画矩形 1.画线 img=cv2. ...
- python学习笔记三 pickle序列化
import pickle f=file('asdf.txt','wb') pickle.dump(saved_info,f)#保存pickle信息 f.close() f=file(asdf.txt ...
- OpenCV Python学习笔记(5)—— 边缘保留滤波(EPF)
1 边缘保留滤波 高斯双边 均值迁移 2 测试 import cv2 as cv import numpy as npdef bi_demo(image):dst = cv.bilateralFilt ...
- Python学习笔记三(turtle:right()、left()、setheading())
turtle.right(degree):顺时针移动degree° turtle.left(degree):逆时针移动degree° setheading(angle):设置当前朝向为angle角度 ...
- Python学习笔记总结
了解了python语言后,决定以后使用python来进行各项工作,因此一直想要深入学习python.千里之行始于足下,万事开头难. 由于最近在准备写毕业论文,陆陆续续学习了Python的语法知识. P ...
最新文章
- Android系统--TouchEvent的处理流程
- Windows10 + VS2015 环境下对gdal2.0.1进行64bit编译小结
- [译] 在 Facebook 发一张登机牌,你就有可能被盗号了
- 总体参数的估计(概念)
- magento app/design/adminhtml/default/default/template/sales/order/view/info.phtml XSS Vul
- java掉单_【Java】抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题...
- 运维工程师如果将web服务http专变为https
- Tomcat8.5.40启动后一直卡在日志At least one JAR was scanned for TLDs yet contained no TLDs
- 课堂作业-1成绩汇总
- 【Linux】修改Linux操作系统字符集与Oracle数据库一致
- 41.Linux/Unix 系统编程手册(下) -- 共享库基础
- java的mime类型_MIME类型大全
- 怎么把sql文件导入MySQL数据库中_《sql基础教程》书里的sql文件如何导入数据库?...
- 一文搞定十大排序算法(细)
- arch模型 python_【一点资讯】Python玩转金融时间序列之ARCH与GARCH模型 www.yidianzixun.com...
- Metasploit为什么选择Ruby语言(部分)
- 精密测量仪器的使用与维护
- 手写英文单词识别(1)
- 用 VeraCrypt 加密闪存盘
- 工程师 or 精英,犹豫中
热门文章
- JAVA零碎要点015---java BigDecimal常见操作_加减乘除操作_比较_取几位小数四舍五入_随时更新
- JAVA常用API或编程工具001---ITEXT把html转换成pdf的jar包,使用Java将HTML转换为PDF
- python数据结构-图
- java中criteria类_java – Criteria API:按类类型过滤
- ucc编译器(x86移植)
- 无人驾驶入门(雷达、定位和高精地图)
- 用汇编的眼光看C++(之缺省模板、特化模板)
- hibernate 链接mysql数据库配置文件,hibernate数据库连接文件(MySql)
- deepin20系统选择手动安装盘_国产操作系统替换微软还有多远?掌上电脑安装深度Deepin 20体验...
- python求矩阵维度必须一致_python数据分析(二)--Numpy