本系列博客主要分享Python在机器视觉/计算机视觉下的编程应用
cv2包是著名的视觉库OpenCV的Python实现
颜色直方图一般用于统计图片不同通道像素强度的分布,并可以基于此来实现对比度提升、以及简单的目标识别、跟踪以及分割等任务。在openCV中集成了函数cv2.calcHist()来实现直方图的计算。
函数定义如下:
cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) → hist
其中images 可为单张或多张图像的array
channels 为要计算的通道数
mask 为图像掩膜
histSize 为直方图的柱子数量,即将数据分布在多少个区间上计数
range 为直方图取值范围
hist为返回值,不用填
accumulate 多张图的时候是否叠加
所以一般调用的时候只需要填上面四个参数,掩膜为None,范围0.0-255.0,数量255个:
hist = cv2.calcHist(img, [0], None,[256], [0.0,255.0])
1. 看一个例子
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读入灰度图像并显示(imread用0参数)
img = cv2.imread('img.jpeg',0)
cv2.imshow('img',img)
cv2.waitKey()
cv2.destroyAllWindows()
接下来计算其像素亮度分布的直方图,在0~255范围内分为255级来计算
hist_255 = cv2.calcHist([img],[0], None, [256], [0.0,255.0]) #灰度图只有一个通道,通道0
#注意,img一定要加[],使其变成三维,否则则会使用第一维进行计算,即不加中括号会计算img[0,:]的直方分布
print('histrogram shape is',hist_255.shape)
plt.plot(hist_255,'gray')
plt.title('Histrogram of gray image')
plt.show()
Output: ‘histrogram shape is’, (256L, 1L)