Python_办公自动化Python_图像处理

Python OpenCV 图像2D直方图,取经之旅第 27 天

2021-11-24  本文已影响0人  梦想橡皮擦

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

基础知识铺垫

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

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

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

cv2.calcHist 函数

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

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

函数原型

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

参数说明:

测试代码如下:

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 直方图了。


20210127214056382[1].png

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

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

numpy 中的 2D 直方图

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

函数原型

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

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

参数说明:

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

测试代码如下:

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


2021012722095639[1].png

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

2021012722091522[1].png

原图如下

20210127221354975[1].jpg

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

橡皮擦的小节

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

相关阅读


  1. Python 爬虫 100 例教程,超棒的爬虫教程,立即订阅吧
  2. Python 爬虫小课,精彩 9 讲

今天是持续写作的第 <font color="red">67</font> / 100 天。
如果你有想要交流的想法、技术,欢迎在评论区留言。


上一篇 下一篇

猜你喜欢

热点阅读