cv2.HISTCMP_BHATTACHARYYA
时间: 2023-10-22 15:09:20 浏览: 140
cv2.HISTCMP_BHATTACHARYYA是一种用于比较两个直方图相似度的方法。它是基于Bhattacharyya距离的,该距离是一种统计学上的度量,用于比较两个概率分布的相似度。在OpenCV中,Bhattacharyya距离被定义为两个概率分布的重叠部分的平方根。因此,cv2.HISTCMP_BHATTACHARYYA的值越小,表示两个直方图越相似。最大值为1,最小值为0。
相关问题
cv2 查看两张图片的相似度
要比较两张图片的相似度,可以使用 OpenCV 中的 cv2 模块。具体步骤如下:
1. 读取两张图片并转换为灰度图像:
```python
import cv2
img1 = cv2.imread('image1.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)
```
2. 计算两张图片的直方图:
```python
hist1 = cv2.calcHist([img1], [0], None, [256], [0, 256])
hist2 = cv2.calcHist([img2], [0], None, [256], [0, 256])
```
3. 使用巴氏距离计算两张图片的相似度:
```python
similarity = cv2.compareHist(hist1, hist2, cv2.HISTCMP_BHATTACHARYYA)
```
其中,相似度值越接近 1,表示两张图片越相似;相似度值越接近 0,表示两张图片越不相似。
完整代码如下:
```python
import cv2
img1 = cv2.imread('image1.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)
hist1 = cv2.calcHist([img1], [0], None, [256], [0, 256])
hist2 = cv2.calcHist([img2], [0], None, [256], [0, 256])
similarity = cv2.compareHist(hist1, hist2, cv2.HISTCMP_BHATTACHARYYA)
print('相似度:', similarity)
```
注意:此方法只能比较两张图片的颜色分布相似度,无法比较图片的内容是否相同。
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函数进行图像直方图比较了。