#File Name : 第九课.py
# 反应图片信息的直方图 三通道的折线图
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def plot_demo(image):
plt.hist(image.ravel(),256,[0,255],color='red')
#多维降为为一维
#x轴的数据 ,条形数,x轴的范围
plt.show()
def channels_plot(image):
color = ['blue','green','red']
for i ,color in enumerate(color):
hist = cv.calcHist([image],[i],None,[256],[0,255])
#image输入图像,传入时应该用中括号[]括起来
#channels::传入图像的通道,如果是灰度图像,那就不用说了,只有一个通道,值为0,如果是彩色图像(有3个通道),那么值为0,1,2,中选择一个,对应着BGR各个通道。这个值也得用[]传入。
#mask:掩膜图像。如果统计整幅图,那么为none。主要是如果要统计部分图的直方图,就得构造相应的炎掩膜来计算。
#histSize:灰度级的个数,需要中括号,比如[256]
#ranges:像素值的范围,通常[0,256],有的图像如果不是0-256,比如说你来回各种变换导致像素值负值、很大,则需要调整后才可以。
print(hist)
# 返回一个一维数组
plt.plot(hist,color=color)
plt.xlim([0,255])
plt.show()
src = cv.imread('G:/openCV/opencv/sources/samples/data/home.jpg')
cv.namedWindow('input image',cv.WINDOW_AUTOSIZE)
cv.imshow('input image',src)
#plot_demo(src)
channels_plot(src)
cv.waitKey(0)