【Python3-OpenCV】图像直方图

333

这是我参与更文挑战的第20天,活动详情查看: 更文挑战

OpenCV是一个C++库,目前流行的计算机视觉编程库,用于实时处理计算机视觉方面的问题,它涵盖了很多计算机视觉领域的模块。在Python中常使用OpenCV库实现图像处理。

image.png

本文将介绍如何在Python3中使用OpenCV实现图像直方图的绘制。

图像直方图由于其计算代价较小,且具有图像平移、旋转、缩放不变性等众多优点,广泛地应用于图像处理的各个领域,特别是灰度图像的阈值分割、基于颜色的图像检索以及图像分类。

图像直方图常常也能反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。

代码如下:

import cv2
from matplotlib import pyplot as plt

def whole_hist(image):
	'''
	绘制整幅图像的直方图
	'''
	plt.hist(image.ravel(), 256, [0, 256]) #numpy的ravel函数功能是将多维数组降为一维数组
	plt.show()

def channel_hist(image):
	'''
	画三通道图像的直方图
	'''
	color = ('b', 'g', 'r')   #这里画笔颜色的值可以为大写或小写或只写首字母或大小写混合
	for i , color in enumerate(color):
		hist = cv2.calcHist([image], [i], None, [256], [0, 256])  #计算直方图
		plt.plot(hist, color)
		plt.xlim([0, 256])
	plt.show()

image = cv2.imread('E:\\demo\\lena.jpg')
cv2.imshow('image', image)
cv2.waitKey(0)
whole_hist(image)
channel_hist(image)

输出为:

image.png

整幅图像直方图:

image.png

三通道图像直方图:

image.png

本月将陆续推出相关系列文章,

篇篇精彩,尽请关注。