OpenCV---直方圖的應用(均衡化和圖像比較)
阿新 • • 發佈:2018-07-06
當我 全局 for 函數 灰度 row ros 應用 部分
一:全局直方圖均衡化(對比度增強)equalizeHist
def equalHist_demo(image): #OpenCV直方圖均衡化都是基於灰度圖像 gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) dst = cv.equalizeHist(gray) #直方圖均衡化,對比度增強 cv.imshow("equalHist_demo",dst)
1.cv2.equalizeHist函數原型:equalizeHist(src[, dst]) -> dst。函數equalizeHist的作用:直方圖均衡化,提高圖像質量。
2.直方圖均衡化:如果一副圖像的像素占有很多的灰度級而且分布均勻,那麽這樣的圖像往往有高對比度和多變的灰度色調。直方圖均衡化就是一種能僅靠輸入圖像直方圖信息自動達到這種效果的變換函數。 它的基本思想是對圖像中像素個數多的灰度級進行展寬,而對圖像中像素個數少的灰度進行壓縮,從而擴展像元取值的動態範圍,提高了對比度和灰度色調的變化,使圖像更加清晰。
3.全局直方圖均衡化可能得到是一種全局意義上的均衡化,但是有的時候這種操作並不是很好,會把某些不該調整的部分給調整了。 Opencv中還有一種直方圖均衡化,它是一種局部直方圖均衡化,也就是是說把整個圖像分成許多小塊(比如按10*10作為一個小塊),那麽對每個小塊進行均衡化。
全局的對比度太強
二:自適應的局部的直方圖均衡化createCLAHE
def clahe_demo(image): #OpenCV直方圖均衡化都是基於灰度圖像 gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) clahe = cv.createCLAHE(clipLimit=2.0,tileGridSize=(8,8)) dst = clahe.apply(gray) #將灰度圖像和局部直方圖相關聯 cv.imshow("clahe_demo",dst)
1.createCLAHE函數原型:createCLAHE([, clipLimit[, tileGridSize]]) -> retval clipLimit參數表示對比度的大小。 tileGridSize參數表示每次處理塊的大小 。
三:直方圖的比較
def create_rag_hist(image): h,w,c = image.shape rgbHist = np.zeros([16*16*16,1],np.float32) bsize = 256/16 #間隔是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] index = np.int(b/bsize)*16*16 + np.int(g/bsize)*16 + np.int(r/bsize) rgbHist[np.int(index),0] = rgbHist[np.int(index),0] + 1 return rgbHist def hist_compare(image1,image2): hist1 = create_rag_hist(image1) hist2 = create_rag_hist(image2) match1 = cv.compareHist(hist1,hist2,cv.HISTCMP_BHATTACHARYYA) #巴氏距離比較,越小越相似 match2 = cv.compareHist(hist1,hist2,cv.HISTCMP_CORREL) #相關性比較(最大為1):越接近1越相似 match3 = cv.compareHist(hist1,hist2,cv.HISTCMP_CHISQR) #卡方比較,越小越相似 print("巴氏:%s 相關性:%s 卡方:%s"%(match1,match2,match3))
hist_compare(src,src) #當我們使用兩張一樣的圖像比較
巴氏:0.0 相關性:1.0 卡方:0.0
OpenCV---直方圖的應用(均衡化和圖像比較)