用opencv的cv2.calchist()函数计算图像的一维直方图和二维直方图
时间: 2024-10-13 18:07:56 浏览: 49
在OpenCV (cv2) 中,`calcHist()` 函数是一个用于计算图像颜色、亮度或其他特征值分布的直方图的工具。这个函数可以帮助我们分析数据的频次分布情况,例如像素值落在某个区间内的频率。
当你需要计算一维直方图时,通常针对的是单通道(灰度图像)的颜色信息或某一种特性。例如:
```python
import cv2
import numpy as np
# 加载图像
img = cv2.imread('image.jpg', 0) # 0表示加载为灰度图像
# 定义直方图的bins数(划分的区间数量)
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
# 计算完毕后,可以使用imshow显示一维直方图
cv2.imshow('Histogram', hist)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
二维直方图则适用于同时考虑两个或更多属性的情况,比如颜色空间中的红绿蓝分量(BGR)。在这种情况下,你需要提供更多的参数,包括每个属性的范围和数组索引。例如:
```python
channels = cv2.split(img)
hist = cv2.calcHist(channels, [0, 1, 2], None, [8, 8, 8], [0, 256, 0, 256, 0, 256])
```
这将分别计算R、G、B三个通道的直方图,并将结果合并成三维数组。
相关问题
import cv2import numpy as npfrom matplotlib import pyplot as plt # 读取图片并转为灰度图像img = cv2.imread("image.jpg", 0) # 计算灰度直方图hist = cv2.calcHist([img], [0], None, [256], [0, 256]) # 显示灰度直方图plt.hist(img.ravel(), 256, [0, 256])plt.show() # 计算二维直方图hsv = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)hist2d = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256]) # 显示二维直方图plt.imshow(hist2d, interpolation="nearest")plt.show()
这段代码是用Python中的OpenCV库来计算和显示图片的灰度直方图和二维直方图。首先,使用cv2.imread()函数读取一张图片并转为灰度图像。然后,使用cv2.calcHist()函数计算灰度直方图和二维直方图。最后,使用matplotlib库中的plt.hist()函数和plt.imshow()函数分别显示灰度直方图和二维直方图。其中,灰度直方图使用一维的256个bin来表示灰度级别的分布情况,而二维直方图则使用180个bin表示色调(hue)的分布情况,256个bin表示饱和度(saturation)的分布情况。
import cv2 import matplotlib.pyplot as plt import numpy #读图 img = cv2.imread(r'C:\Users\1337380312\Desktop\graduation project\grey-scale map\zhuang71-cold (5).jpg.jpg') #转换成灰度图 img2 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #显示灰度图 cv2.imshow('gray_img',img2) cv2.waitKey(0) #获取直方图,由于灰度图img2是二维数组,需转换成一维数组 plt.hist(img2.ravel(),256) #显示直方图 plt.show() cv2.waitKey(0)
这是一段使用OpenCV和Matplotlib库读取一张图片,将其转换为灰度图,并绘制其直方图的代码。其中,cv2.imread()函数读取图片,cv2.cvtColor()函数将其转换为灰度图,cv2.imshow()函数显示灰度图,plt.hist()函数获取直方图数据并绘制直方图,plt.show()函数显示直方图。需要注意的是,cv2.imshow()和cv2.waitKey()函数常用于OpenCV图形界面的显示和交互,如果你在使用Jupyter Notebook等非图形界面的环境下运行,这两个函数可能会无法正常工作。
阅读全文