python opencv histogram2d

二维histogram,你就要考虑两个属性了。一般来说对于彩色histogram两个属性是色调和饱和度的值
对于彩色histogram我们需要把图像从BGR转换成HSV。(记住,对于1维histogram,我们从BGR转成灰度)

# OpenCV里的2D histogram

import cv2
import numpy as np

img = cv2.imread('touxiang.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

# Numpy里的2D histogram
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('touxiang.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)#分离通道

hist, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])
# 第一个参数是H,第二个是S,第三个是bins的数量第四个是他们的范围

绘制2D histogram

方法1.使用cv2.imshow()
我们得到的结果是一个二维数组,大小是180x256,所以我们可以用普通的显示方法,cv2.imshow()。这会画出一个灰度图,当然不会告诉你颜色信息,除非你知道不同颜色的色调值。

方法2.使用Matplotlib
我们可以使用matplotlib.pyplot.imshow()函数来画2D Histogram。它可以更好的表达不同像素强度。但是还是不会直观的表达颜色。不过我还是推荐这种方法,更简单直观。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('smallpig.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hist = cv2.calcHist( [hsv], [0, 1], None, [180, 256], [0, 180, 0, 256] )

plt.imshow(hist,interpolation = 'nearest')
plt.show()


python opencv histogram2d_第1张图片

方法3.OpenCV




你可能感兴趣的:(python)