10绘制图像直方图matplotlib&opencv

https://blog.csdn.net/Eastmount/article/details/83758402

matplotlib绘制图像直方图

# hist(数据源, 像素级)
# 参数:
# 数据源必须是一维数组,通常需要通过函数ravel()拉直图像
# 像素级一般是256,表示[0, 255]
import cv2  
import numpy as np
import matplotlib.pyplot as plt

src = cv2.imread('C:/Users/31035/Desktop/yifei/01.jpg', cv2.IMREAD_UNCHANGED)

cv2.imshow("src", src)
cv2.waitKey(0)
cv2.destroyAllWindows()

plt.hist(src.ravel(), 256)  #把bgr的所有像素汇聚在0-255之间
plt.show()

10绘制图像直方图matplotlib&opencv_第1张图片
src.size查看像素总数。

使用OpenCV统计绘制直方图

#hist = cv2.calcHist(images, channels, mask, histSize, ranges, accumulate)
#hist表示直方图,返回的是一个二维数组
# images表示原始图像
# channels表示指定通道,通道编号需要用中括号括起,输入图像是灰度图像时,它的值为[0],彩色图像则为[0]、[1]、[2],分别表示B、G、R
# mask表示掩码图像,统计整副图像的直方图,设为None,统计图像的某一部分直方图时,需要掩码图像
# histSize表示BINS的数量,参数子集的数目,如下图当bins=3表示三个灰度级
# ranges表示像素值范围,例如[0, 255]
# accumulate表示累计叠加标识,默认为false,
# 如果被设置为true,则直方图在开始分配时不会被清零,
# 该参数允许从多个对象中计算单个直方图,或者用于实时更新直方图;
# 多个直方图的累积结果用于对一组图像的直方图计算

src = cv2.imread('C:/Users/31035/Desktop/yifei/01.jpg', cv2.IMREAD_UNCHANGED)

histb = cv2.calcHist([src], [0], None, [256], [0,255])
histg = cv2.calcHist([src], [1], None, [256], [0,255])
histr = cv2.calcHist([src], [2], None, [256], [0,255])

cv2.imshow("src", src)
cv2.waitKey(0)
cv2.destroyAllWindows()

plt.plot(histb, color='b')
plt.plot(histg, color='g')
plt.plot(histr, color='r')
plt.show()

10绘制图像直方图matplotlib&opencv_第2张图片

#绘制条形图
plt.bar(range(len(histb)),histb, color='b')
# plt.hist(histg, color='g')
# plt.hist(histr, color='r')
plt.show()

你可能感兴趣的:(10绘制图像直方图matplotlib&opencv)