python opencv根据图片给出直方图
时间: 2023-08-30 19:05:30 浏览: 47
好的,您可以参考以下代码实现:
```
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图片
img = cv2.imread('image.jpg')
# 将图片转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算直方图
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
# 绘制直方图
plt.hist(gray.ravel(), 256, [0, 256])
plt.xlabel('Bins')
plt.ylabel('Number of pixels')
plt.show()
```
其中,`cv2.imread()`函数用于读取图片,`cv2.cvtColor()`函数用于将图片转换为灰度图像,`cv2.calcHist()`函数用于计算直方图。最后,使用Matplotlib库中的`plt.hist()`函数绘制直方图。
希望能解决您的问题。
相关问题
python opencv 图像对比_Python Opencv中用compareHist函数进行直方图比较对比图片
要使用compareHist函数进行图像直方图比较,需要先将要比较的两幅图像的直方图计算出来。具体步骤如下:
1. 导入必要的库:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
```
2. 加载要比较的两幅图像:
```python
img1 = cv2.imread('image1.png')
img2 = cv2.imread('image2.png')
```
3. 将图像转为HSV空间,并计算直方图:
```python
hsv1 = cv2.cvtColor(img1, cv2.COLOR_BGR2HSV)
hsv2 = cv2.cvtColor(img2, cv2.COLOR_BGR2HSV)
hist1 = cv2.calcHist([hsv1], [0, 1], None, [180, 256], [0, 180, 0, 256])
hist2 = cv2.calcHist([hsv2], [0, 1], None, [180, 256], [0, 180, 0, 256])
```
其中,第一个参数是要计算直方图的图像,第二个参数是通道,[0, 1] 表示计算H和S通道的直方图,第三个参数是掩膜,这里不使用,第四个参数是直方图的大小,第五个参数是每个通道的取值范围。
4. 使用compareHist函数进行直方图比较:
```python
# 使用相关性比较方法
corr = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CORREL)
print('Correlation:', corr)
# 使用卡方比较方法
chi = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CHISQR)
print('Chi-Square:', chi)
# 使用交叉熵比较方法
cross = cv2.compareHist(hist1, hist2, cv2.HISTCMP_INTERSECT)
print('Intersection:', cross)
# 使用巴氏距离比较方法
bhat = cv2.compareHist(hist1, hist2, cv2.HISTCMP_BHATTACHARYYA)
print('Bhattacharyya:', bhat)
```
其中,第一个参数是要比较的直方图1,第二个参数是要比较的直方图2,第三个参数是比较方法,可以选择相关性、卡方、交叉熵或巴氏距离。
5. 可以将比较结果可视化:
```python
plt.subplot(121), plt.imshow(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB))
plt.title('Image 1'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB))
plt.title('Image 2'), plt.xticks([]), plt.yticks([])
plt.show()
```
这样就可以使用Python Opencv中的compareHist函数进行图像直方图比较了。
python opencv 图像的灰度直方图
要生成一张图像的灰度直方图,可以使用OpenCV中的cv2.calcHist()函数。以下是一个示例代码:
```python
import cv2
from 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()
```
在这个例子中,我们首先使用cv2.imread()函数读取一张图像,并将其转换为灰度图像。然后,我们使用cv2.calcHist()函数计算该图像的灰度直方图。最后,我们使用matplotlib库中的plt.hist()函数将灰度直方图绘制出来。
在plt.hist()函数中,第一个参数是图像的像素值(使用ravel()函数将图像转换为一维数组),第二个参数是直方图的分档数,第三个参数是直方图的范围。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)