本篇内容介绍了“Python Opencv中用compareHist函数怎么实现用直方图比较对比图片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Python可以做什么
Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗易懂,容易入门,功能强大,在许多领域中都有广泛的应用,例如最热门的大数据分析,人工智能,网页开发等。
<强>图像直方图强>
图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。
图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。在实际工程中,图像直方图在特征提取,图像匹配等方面都有很好的应用。
<强>直方图比较强>
1。图像相似度比较
如果我们有两张图像,并且这两张图像的直方图一样,或者有极高的相似度,那么在一定程度上,我们可以认为这两幅图是一样的,这就是直方图比较的应用之一。
2。分析图像之间关系
两张图像的直方图反映了该图像像素的分布情况,可以利用图像的直方图,来分析两张图像的关系。
<强>直方图比较函数强>
cv2.compareHist (H1, H2,方法)
其中:
- <李>
H1, H2分别为要比较图像的直方图
李> <李>方法——比较方式
<强>比较方式(方法)强>
- <李>
相关性比较(方法=cv.HISTCMP_CORREL)值越大,相关度越高,最大值为1,最小值为0
李> <李>卡方比较(方法=简历。HISTCMP_CHISQR值越小,相关度越高,最大值无上界,最小值0
李> <李>巴氏距离比较(方法=cv.HISTCMP_BHATTACHARYYA)值越小,相关度越高,最大值为1,最小值为0
李>代码实现
import cv2 as 简历 import numpy  as np 得到matplotlib import  pyplot as  plt def create_rgb_hist(图片): ,““““创建,RGB 三通道直方图(直方图矩阵)“““ ,h, w, c =image.shape ,#创建一个(16 * 16 * 16日1)的初始矩阵,作为直方图矩阵, ,# 16 * 16 * 16的意思为三通道每通道有16个箱子=,,rgbhist  np.zeros([16, *, 16, *, 16日,1],,np.float32)=,bsize 256年,/16 ,for row 拷贝范围(h): for 才能;col 拷贝范围(w): ,,b =,图像(行,坳,0) ,,g =,图像(行,坳,,1] ,,r =,图像(坳,行,还以为;2) ,,#,人为构建直方图矩阵的索引,该索引是通过每一个像素点的三通道值进行构建 ,,index =, int (b /, bsize), *, 16, *, 16, +, int(时间/g bsize), *, 16, +, int(时间/r bsize) ,,#,该处形成的矩阵即为直方图矩阵 ,,rgbhist (int(索引),0),+=1 ,plt.ylim ([0, 10000]) ,plt.grid(颜色=& # 39;" # 39;,,线型=& # 39;——& # 39;,,线宽=0.5,α=0.3) return rgbhist def hist_compare (image1, image2): ,“““直方图比较函数“““ ,#创建第一幅图的rgb三通道直方图(直方图矩阵)=,,hist1  create_rgb_hist (image1) ,#创建第二幅图的rgb三通道直方图(直方图矩阵)=,,hist2  create_rgb_hist (image2) ,#进行三种方式的直方图比较=,,match2  cv.compareHist (hist1, hist2,, cv.HISTCMP_BHATTACHARYYA)=,,match3  cv.compareHist (hist1, hist2,, cv.HISTCMP_CORREL)=,,match4  cv.compareHist (hist1, hist2,, cv.HISTCMP_CHISQR) ,打印(“巴氏距离:% s,,相关性:% s,,卡方:% s", % (match2, match3,, match4)) 时间=src1 cv.imread (“diff1.PNG") cv.imshow (“diff1", src1) 时间=src2 cv.imread (“diff2.PNG") cv.imshow (“diff2", src2) plt.subplot(1、2、1) plt.title (“diff1") plt.plot (create_rgb_hist (src1)) plt.subplot(1、2、2) plt.title (“diff2") plt.plot (create_rgb_hist (src2)) hist_compare (src1, src2) plt.show () cv.waitKey (0) cv.destroyAllWindows ()