Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧。

基础知识铺垫

在之前的博客中,我们获取图像直方图的方式都是获取一维直方图,简单说就是只获取一个通道的特征,例如灰度,B 通道,R 通道。

今天要学习的第一个内容是二维直方图,也叫做 2D 直方图,涉及两个特征,其中一个是像素的色调,另一个是饱和度。

有这两个值你应该能猜到,需要提前将图像转换成 HSV 格式。

cv2.calcHist 函数

计算 2D 直方图,使用的函数与之前学习的一样,也是 cv2.calcHist 函数。

如果获取彩色直方图,需要提前将 BGR 转换成 HSV。

函数原型

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

参数说明:

images: 原图像(图像格式为 uint8 或 float32),当传入函数时应该用中括号 []括起来,例如:[img];

channels:[0,1] 需要同时处理 H 和 S 两个通道;

bins:[180,256] Hue 通道为 180,S 通道为 256;

range:[0,180,0,256],Hue 的取值范围在 0 到 180,饱和度 S 的取值范围在 0 到 256。

测试代码如下:

import cv2 as cv

import numpy as np

from matplotlib import pyplot as plt

def create_2d_hist(image):

hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)

hist = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

return hist

img = cv.imread('2.jpg')

hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)

plt.plot(create_2d_hist(img))

plt.show()

运行效果如下图所示,可以看到 2D 直方图了。

在检索资料的时候,还学习到如下展示直方图的方式,不过效果不如线条的好。

plt.imshow(hist,interpolation = 'nearest')

numpy 中的 2D 直方图

numpy 库也为 2D 直方图提供了一个函数,np.histogram2d函数。

函数原型

由于之前已经学习过 np.histogram 函数了,学习这个 2D 直方图函数理解上就比较容易了。

histogram2d(x, y, bins=10, range=None, normed=None, weights=None, density=None)

参数说明:

x, y:H 通道与 S 通道;

bins:bins 数目;

range:H 和 S 的范围。

参数更细致的说明可以通过 help(np.histogram2d) 查阅。

测试代码如下:

运行之后,发现结果如下图所示。

上表红线为橡皮擦标记内容,两个表进行对应。H=25,S=20 还有 H=100-150,S=120-100,可以得出黄色,蓝色,紫色区域高值,对应的原图上,结论差不多。

原图如下

官方手册可以阅读:点击跳转

橡皮擦的小节

希望今天的一个小时,你有所收获,我们下篇博客见~

相关阅读

今天是持续写作的第 67 / 100 天。

如果你有想要交流的想法、技术,欢迎在评论区留言。

如果你想跟博主建立亲密关系,可以关注博主,或者关注博主公众号 “非本科程序员”,了解一个非本科程序员是如何成长的。

博主 ID:梦想橡皮擦,希望大家点赞、评论、收藏

本文同步分享在 博客“梦想橡皮擦”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

python亲密度_Python OpenCV 图像2D直方图,取经之旅第 25 天相关推荐

  1. Python OpenCV 图像平移,取经之旅第 10 天

    今天是持续写作的第 43 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 本篇博客学习 OpenCV 中关于图像平移的方法,核心学习到的方法是 warpAffine . 取经之旅第 ...

  2. python cv2.resize_Python OpenCV 图像缩放 cv2.resize 方法

    今天是持续写作的第 42 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 本篇博客只学习一个方法,cv2.resize 即图像缩放. 取经之旅第 9 天 铺垫知识 resize 方 ...

  3. 《OpenCv视觉之眼》Python图像处理六 :Opencv图像傅里叶变换和傅里叶逆变换原理及实现

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  4. 《OpenCv视觉之眼》Python图像处理十 :Opencv图像形态学处理之开运算、闭运算和梯度运算原理及方法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  5. opencv python 直方图反向投影_python OpenCV学习笔记直方图反向投影的实现

    本文介绍了python OpenCV学习笔记直方图反向投影的实现,分享给大家,具体如下: 它用于图像分割或寻找图像中感兴趣的对象.简单地说,它创建一个与我们的输入图像相同大小(但单通道)的图像,其中每 ...

  6. python皮同_Python OpenCV 图像的双线性插值算法,全网最细致的算法说明_橡皮擦,一个逗趣的互联网高级网虫-CSDN博客...

    原文作者:梦想橡皮擦 原文标题:Python OpenCV 图像的双线性插值算法,全网最细致的算法说明 发布时间:2021-02-17 20:55:32 Python OpenCV 365 天学习计划 ...

  7. python打出由边框包围的_python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)...

    图像边框的实现 图像边框设计的主要函数 cv.copyMakeBorder()--实现边框填充 主要参数如下: 参数一:源图像--如:读取的img 参数二--参数五分别是:上下左右边的宽度--单位:像 ...

  8. pythonopencv图像形态_python+opencv图像形态学处理详细解释(膨胀、腐蚀、开闭运算、礼帽和黑猫)...

    python+opencv图像形态学处理 本篇博客主要是关于形态学中的腐蚀.膨胀.开运算.闭运算.礼帽和黑帽的函数用法. 内容会比较,为方便查阅.代码的解释会写在代码中. 用于测试的图像原图: 一.腐 ...

  9. python图像拼接_python opencv 图像拼接的实现方法

    初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关.高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图. 具有相同尺寸的 ...

最新文章

  1. 转:Flutter Decoration背景设定(边框、圆角、阴影、形状、渐变、背景图像等)...
  2. 电脑有回声_专递课堂互动教室现场有回声怎么办?
  3. golang管道channel与协程goroutine配合使用示例
  4. 一些培养程序员leadership的经验教训
  5. matlab和C/C++混合编程--Mex (转载)
  6. fork( )函数(转载)
  7. [Zer0pts2020]ROR1
  8. 解析rtcm32报文工具_RTKLIB编译及RTCM数据读取样例
  9. html 前端分页代码怎么写,纯JavaScript实现的前端分页代码
  10. 以大数据架构电商2.0的新时代
  11. background详解
  12. win7笔记本做wifi热点
  13. esp32cam与android app的同步udp通信
  14. 什么是计算机的多用户,操作系统多用户是什么意思
  15. Windpy + Pycharm(No such file报错解决方式)
  16. XGen for iOS789 简明 教程
  17. php 字典树实现,数据结构之「字典树」
  18. 量化交易 实战第七课 单因子 IC 分析
  19. 18.5.30集训阶段性小结
  20. B1019/A1069 数字黑洞 借用string, algorithm快速完成

热门文章

  1. Eigen(6)快操作
  2. 通过一段汇编,加深对寄存器ESP和EBP的理解
  3. simulink怎么生成vxworks的执行程序_Matlab/Simulink基础了解(五):基础Simulink模型搭建及Embedded基础使用...
  4. pause容器作用_Kubernetes学习之pause容器
  5. MFC中打开文件对话框:CFileDlg
  6. vue项目中使用mock(二)
  7. 前端八大灵感设计,代码变为现实
  8. 人工智能AI实战100讲(十)-一文读懂推荐系统负采样
  9. 人工智能AI实战100讲(二)-自动驾驶传感器之激光雷达(一)激光雷达为何必不可少?
  10. ug11 linux,UG11.0升级包MP02Win#Linux系统下载就上UG网