天天看點

openCV第九課

#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)