1. 直方图:

直方图统计图像中各个灰度级出现的次数,横坐标为各个像素点的灰度级,纵坐标是具有该灰度级的像素个数。

上面这个九宫格我们可以想象成一张图像,里面的数字代表当前像素的灰度等级。

用图表显示:X轴代表灰度级,Y轴代表统计次数。

在实际处理中,X轴代表8位的256个灰度级[0-255],Y轴代表具有相应的灰度级的像素点的个数。
示例: 统计这个纯白色背景下的黑色8的图像的直方图

2. 绘制直方图:

模块matplotlib.pyplot 提供了一个类似 MATLAB 的绘图框架,其中hist()函数可以用来绘制直方图。

hist( X,BINS)

  • X为数据源,必须是一维的,二维图像需要通过ravel()函数转换为一维数组之后传入hist()函数。
  • BINS为灰度的分组情况,相当于前面的Y。

上代码:

import cv2
import matplotlib.pyplot as plto=cv2.imread("image\\8.bmp")
cv2.imshow("original",o)
# 显示直方图
plt.hist(o.ravel(),256) # 将o转换为一维数组,然后显示256个等级【0-255】cv2.waitKey()
cv2.destroyAllWindows()

3. OpenCV中绘制直方图:

hist = cv2.calcHist( images, channels, mask, histSize, ranges, accumulate )

  • hist返回一个一维数组,数组中是每个灰度等级的像素个数。
  • images为原始图像,注意用[]括起来。
  • channels为通道,单通道为[0],彩色通道分别用[0],[1],[2]表示B,G,R。
  • mask为掩模,没有掩模的时候传None。
  • histSize表示BINS子集,注意用[]括起来。
  • ranges表示像素范围,比如单通道[0,255]。
  • accumlate暂时为空。

上代码:

import cv2
import numpy as npimg=cv2.imread("image\\hist.png")
# 计算直方图
hist = cv2.calcHist([img],[0],None,[2],[0,256]) # 这里像素范围[0,255]只能返回0灰
# 度等级的像素数,至于原因求高手分析???print(hist)cv2.waitKey()
cv2.destroyAllWindows()

运行:

使用plot分通道提取直方图代码:

import cv2
import matplotlib.pyplot as plto=cv2.imread("image\\girl.bmp")
cv2.imshow("original",o)
histb = cv2.calcHist([o],[0],None,[256],[0,255]) # channels中[0][1][2]分别代表BGR通道
histg = cv2.calcHist([o],[1],None,[256],[0,255])
histr = cv2.calcHist([o],[2],None,[256],[0,255])plt.plot(histb,color='b')
plt.plot(histg,color='g')
plt.plot(histr,color='r')
plt.show()

运行:

4. 掩模后绘制直方图:

与运算:
当M=1时:O AND M = 原图O
当N=0时:O AND M = 0(零)

构造一个掩模图像

import cv2
import numpy as npmask=np.zeros([600,600],np.uint8) #构造一个像素为0的二维数组
mask[200:400,200:400]=255 # 将X200-X400、Y200-Y400之间的数组值改为255cv2.imshow('mask',mask)
cv2.waitKey()
cv2.destroyAllWindows()

运行:

绘制一个掩模后的图像的直方图:

import cv2
import numpy as np
import matplotlib.pyplot as pltimage=cv2.imread("image\\girl.bmp",cv2.IMREAD_GRAYSCALE)# 创建一个原图一个大小的二维数组,元素0黑色
mask=np.zeros(image.shape,np.uint8)
# 掩模,改变200-400区域为白色
mask[200:400,200:400]=255# 将原图和掩模图进行与运算,黑色区域被消除
m=cv2.bitwise_and(image,mask)# 计算原图和掩模后图像的直方图
histImage=cv2.calcHist([image],[0],None,[256],[0,255])
histMI=cv2.calcHist([image],[0],mask,[256],[0,255])
plt.plot(histImage,color='r')
plt.plot(histMI,color='g')cv2.imshow("o",image)
cv2.imshow("mask",mask)
cv2.imshow("maskImg",m)cv2.waitKey()
cv2.destroyAllWindows()

运行:


Over。。。。。。。。。。。。。。。

OpenCV笔记整理【直方图和掩模】相关推荐

  1. OpenCV笔记整理【模板匹配】

    1. 模板匹配 模板匹配就是在图像A中寻找与图像B最相似的部分,一般将图像A称为输入图像,图像B称为模板图像.操作方式是B在A图像上从左到右自上而下滑动,遍历所有的像素. 模板匹配函数: result ...

  2. python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化

    本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_hi ...

  3. opencv笔记(6):彩色图像直方图

    生活就像大海,我就像一条咸鱼,在浩瀚的海洋中边浪边学,这是opencv笔记系列中的「彩色图像直方图」.更多可参观[浪学]公众号~ 颜色直方图是在许多图像检索系统中被广泛采用的颜色特征.它所描述的是不同 ...

  4. OpenCV笔记23:OpenCV图像直方图

    那么什么是直方图? 直方图是条形图的变体,其中数据值组合在一起并放入不同的类中. 通过此分组,您可以查看每个类中数据在数据集中出现的频率. 1.学习目标 (1)使用OpenCV Python使用图像直 ...

  5. 视觉SLAM总结——视觉SLAM十四讲笔记整理

    视觉SLAM总结--视觉SLAM十四讲笔记整理 说明 基础知识点 1. 特征提取.特征匹配 (1)Harris (2)SIFT (3)SUFT (4)ORB (5)特征匹配 2. 2D-2D:对极约束 ...

  6. OpenCV笔记-图像预处理1

    OpenCV笔记 一. 图像预处理 1. 图像显示与存储 1.1 颜色空间 颜色空间(RGB) 加法混色 三通道:RGB 一个像素的颜色值:(b,g,r) 取值范围:[0,255] or [0.0,1 ...

  7. 2021/06/29计算机视觉期末复习笔记整理

    计算机视觉期末复习笔记整理 引言 我的复习参考 期末考试考题回忆 PPT对应中文笔记整理 参考的几篇博客的笔记 引言 刚结束可能是我学生时代最后一场考试了,orz热乎着,记录一下. 这门课是学校新开的 ...

  8. OpenCV系列之直方图-1:查找、绘制和分析 | 二十六

    目标 学会 使用OpenCV和Numpy函数查找直方图 使用OpenCV和Matplotlib函数绘制直方图 你将看到以下函数:cv.calcHist(),np.histogram()等. 理论 那么 ...

  9. 吴恩达机器学习笔记整理(Week1-Week5)

    吴恩达机器学习笔记整理 1. Week1 1.1 什么是机器学习(What is Machine Learning) 1.2机器学习算法分类 1.3 单变量线性回归(Linear Regression ...

最新文章

  1. java面试-Java并发编程(九)——批量获取多条线程的执行结果
  2. 笔记-高项案例题-2017年上-变更管理-需求管理
  3. jQuery Mobile 基础(第三章)
  4. C语言结构体用法很多,坑也很多
  5. c++椭圆最小二乘法原理_c++ 椭圆拟合之最小二乘法(图像处理)
  6. 任正非:5G只是一个工具 本身没有安全问题
  7. 在阿里云服务器中安装配置mysql数据库完整教程
  8. 大企业都在用的开源 ForgeRock OpenAM 被曝预认证 RCE 0day
  9. KST1G SD卡脚本提取JPG
  10. 六、简单又有坑的原型模式
  11. win10下如何安装.NetFrame3.5框架
  12. 直播系统源代码,快速实现改变图片尺寸
  13. 七代处理器装win7_七代cpu为什么不支持win7?
  14. spyder 5语言设置简体中文
  15. JZOJ5460. 【NOIP2017提高A组冲刺11.7】士兵训练
  16. 弹性云服务器是什么意思?弹性体现在哪里
  17. 在Linux部署SSM项目
  18. 初识Python自动化运维(一)
  19. 第十一章 文件操作_C语言fopen函数的用法,C语言打开文件详解
  20. Node系列-爬虫踩坑笔记

热门文章

  1. java课程设计斗地主_Java课程设计---web版斗地主
  2. 矩阵【线性代数系列(二)】
  3. 【网络】计算机网络重点知识总结
  4. AXI CDMA Linux user space example on Zynq UltraScale+ RFSoC
  5. 深入理解JVM(1)
  6. 加油站APP开发定制功能
  7. 【Python学习随笔】依赖倒置原则 + 简单工厂模式
  8. python代码流星雨_HTML5梦幻之旅——炫丽的流星雨效果实现过程_html5教程技巧
  9. oracle ebs 简介
  10. 《THE BASIC GRAMMER OF C》