溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python Opencv中用compareHist函數(shù)怎么實(shí)現(xiàn)用直方圖比較對(duì)比圖片

發(fā)布時(shí)間:2021-03-10 16:53:37 來(lái)源:億速云 閱讀:726 作者:TREX 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容介紹了“Python Opencv中用compareHist函數(shù)怎么實(shí)現(xiàn)用直方圖比較對(duì)比圖片”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

python可以做什么

Python是一種編程語(yǔ)言,內(nèi)置了許多有效的工具,Python幾乎無(wú)所不能,該語(yǔ)言通俗易懂、容易入門、功能強(qiáng)大,在許多領(lǐng)域中都有廣泛的應(yīng)用,例如最熱門的大數(shù)據(jù)分析,人工智能,Web開(kāi)發(fā)等。


圖像直方圖

圖像直方圖是反映一個(gè)圖像像素分布的統(tǒng)計(jì)表,其實(shí)橫坐標(biāo)代表了圖像像素的種類,可以是灰度的,也可以是彩色的??v坐標(biāo)代表了每一種顏色值在圖像中的像素總數(shù)或者占所有像素個(gè)數(shù)的百分比。
圖像是由像素構(gòu)成,因?yàn)榉从诚袼胤植嫉闹狈綀D往往可以作為圖像一個(gè)很重要的特征。在實(shí)際工程中,圖像直方圖在特征提取、圖像匹配等方面都有很好的應(yīng)用。

直方圖比較

1. 圖像相似度比較

如果我們有兩張圖像,并且這兩張圖像的直方圖一樣,或者有極高的相似度,那么在一定程度上,我們可以認(rèn)為這兩幅圖是一樣的,這就是直方圖比較的應(yīng)用之一。

2. 分析圖像之間關(guān)系

兩張圖像的直方圖反映了該圖像像素的分布情況,可以利用圖像的直方圖,來(lái)分析兩張圖像的關(guān)系。

直方圖比較函數(shù)

cv2.compareHist(H1, H2, method)

其中:

  • H1,H2 分別為要比較圖像的直方圖

  • method - 比較方式

比較方式(method)

  • 相關(guān)性比較 (method=cv.HISTCMP_CORREL) 值越大,相關(guān)度越高,最大值為1,最小值為0

  • 卡方比較(method=cv.HISTCMP_CHISQR 值越小,相關(guān)度越高,最大值無(wú)上界,最小值0

  • 巴氏距離比較(method=cv.HISTCMP_BHATTACHARYYA) 值越小,相關(guān)度越高,最大值為1,最小值為0

代碼實(shí)現(xiàn)

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def create_rgb_hist(image):
 """"創(chuàng)建 RGB 三通道直方圖(直方圖矩陣)"""
 h, w, c = image.shape
 # 創(chuàng)建一個(gè)(16*16*16,1)的初始矩陣,作為直方圖矩陣 
 # 16*16*16的意思為三通道每通道有16個(gè)bins
 rgbhist = np.zeros([16 * 16 * 16, 1], np.float32)
 bsize = 256 / 16
 for row in range(h):
  for col in range(w):
   b = image[row, col, 0]
   g = image[row, col, 1]
   r = image[row, col, 2]
   # 人為構(gòu)建直方圖矩陣的索引,該索引是通過(guò)每一個(gè)像素點(diǎn)的三通道值進(jìn)行構(gòu)建
   index = int(b / bsize) * 16 * 16 + int(g / bsize) * 16 + int(r / bsize)
   # 該處形成的矩陣即為直方圖矩陣
   rgbhist[int(index), 0] += 1
 plt.ylim([0, 10000])
 plt.grid(color='r', linestyle='--', linewidth=0.5, alpha=0.3)
 return rgbhist
def hist_compare(image1, image2):
 """直方圖比較函數(shù)"""
 # 創(chuàng)建第一幅圖的rgb三通道直方圖(直方圖矩陣)
 hist1 = create_rgb_hist(image1)
 # 創(chuàng)建第二幅圖的rgb三通道直方圖(直方圖矩陣)
 hist2 = create_rgb_hist(image2)
 # 進(jìn)行三種方式的直方圖比較
 match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)
 match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)
 match4 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)
 print("巴氏距離:%s, 相關(guān)性:%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()

Python Opencv中用compareHist函數(shù)怎么實(shí)現(xiàn)用直方圖比較對(duì)比圖片

Python Opencv中用compareHist函數(shù)怎么實(shí)現(xiàn)用直方圖比較對(duì)比圖片

巴氏距離:0.3116175231543461, 相關(guān)性:0.8805851455583134,
卡方:154379.82963705878

從計(jì)算得到的三個(gè)比較值可以發(fā)現(xiàn)巴氏距離較低,相關(guān)性較高,可以簡(jiǎn)單認(rèn)為這兩幅圖的相似度比較大。

例如下面兩幅圖

Python Opencv中用compareHist函數(shù)怎么實(shí)現(xiàn)用直方圖比較對(duì)比圖片

Python Opencv中用compareHist函數(shù)怎么實(shí)現(xiàn)用直方圖比較對(duì)比圖片

巴氏距離:0.8939676325760126, 相關(guān)性:0.03202528698270991,
卡方:503948.24201884575

從計(jì)算得到的三個(gè)比較值可以發(fā)現(xiàn)巴氏距離很高,相關(guān)性系數(shù)很低,可以簡(jiǎn)單認(rèn)為這兩幅圖的相似度非常小。

總結(jié)

“Python Opencv中用compareHist函數(shù)怎么實(shí)現(xiàn)用直方圖比較對(duì)比圖片”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI