Opencv實(shí)現(xiàn)二維直方圖的計(jì)算及繪制
這篇博客將介紹如何使用Python,Opencv進(jìn)行二維直方圖的計(jì)算及繪制(分別用Opencv和Numpy計(jì)算),二維直方圖可以讓我們對不同的像素密度有更好的了解。
1. 效果圖
原始圖如下:
1維直方圖如下:
2維直方圖如下:
X軸顯示S值,Y軸顯示色調(diào)。
hsvmap效果圖如下:
2. 源碼
# OpenCV中的二維直方圖:使用相同的函數(shù)cv2.calcHist()計(jì)算。 # 對于1D直方圖,我們從BGR轉(zhuǎn)換為灰度 # 對于2D直方圖,需要將圖像從BGR轉(zhuǎn)換為HSV import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('ym.jpg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 1維直方圖 hist = cv2.calcHist([gray], [0], None, [256], [0, 256]) hist, bins = np.histogram(img.ravel(), 256, [0, 256]) plt.hist(img.ravel(), 256, [0, 256]) plt.show() # 二維直方圖可以讓我們對不同的像素密度有了更好的了解 # OpenCV計(jì)算2D直方圖 # HSV圖像 [0,1]表示H、S通道,[180,256]表示H、S的bins分別為180、256 # [0,180,0,256]表示值的范圍 hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256]) hist = np.clip(hist * 0.005, 0, 1) cv2.imshow('hist', hist) cv2.waitKey(0) plt.imshow(hist, interpolation='nearest') plt.show() # Numpy計(jì)算1D直方圖:np.histogram(); # Numpy計(jì)算2D直方圖:np.historogram2d() h, s, v = cv2.split(hsv) hist, xbins, ybins = np.histogram2d(h.ravel(), s.ravel(), [180, 256], [[0, 180], [0, 256]]) plt.imshow(hist, interpolation='nearest') plt.show()
參考
https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_histograms/py_2d_histogram/py_2d_histogram.html#twod-histogram
https://github.com/seminar2012/opencv/blob/master/samples/python/color_histogram.py
到此這篇關(guān)于Opencv實(shí)現(xiàn)二維直方圖的計(jì)算及繪制的文章就介紹到這了,更多相關(guān)Opencv 二維直方圖 內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。