python opencv 图像对比_Python Opencv中用compareHist函数进行直方图比较对比图片
时间: 2023-10-09 10:12:05 浏览: 284
要使用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函数进行图像直方图比较了。
阅读全文