這篇博客將介紹如何使用Python,Opencv進(jìn)行二維直方圖的計(jì)算及繪制(分別用Opencv和Numpy計(jì)算),二維直方圖可以讓我們對(duì)不同的像素密度有更好的了解。
# OpenCV中的二維直方圖:使用相同的函數(shù)cv2.calcHist()計(jì)算。
# 對(duì)于1D直方圖,我們從BGR轉(zhuǎn)換為灰度
# 對(duì)于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()
# 二維直方圖可以讓我們對(duì)不同的像素密度有了更好的了解
# 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!