<button id="ssm6u"><optgroup id="ssm6u"></optgroup></button>
  • 跳轉至

    Matplotlib顯示灰度圖

    概要

    本文講解了如何將圖片轉換成灰度圖,并通過matplotlib顯示
    keywords Matplotlib Grayscale cvtColor

    轉變為灰度圖并顯示

    按照之前我們的思路, 使用cvtColor 將色彩空間從BGR轉變為灰度圖, 不就好了嗎 , 我們來試一下。

    # -*- coding: utf-8 -*- 
    import numpy as np
    import cv2
    # 引入Python的可視化工具包 matplotlib
    from matplotlib import pyplot as plt
    
    # 導入一張圖像 模式為彩色圖片
    img = cv2.imread('cat.jpg', cv2.IMREAD_COLOR)
    
    # 將色彩空間轉變為灰度圖并展示
    gray  = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    plt.imshow(gray)
    
    # 隱藏坐標系
    plt.axis('off')
    # 展示圖片
    plt.show()
    

    0120_cat_gray_wrong.png

    天啊嚕, 這個更恐怖了, 我們來打印一下圖片的信息。

    def print_img_info(img):
        print("================打印一下圖像的屬性================")
        print("圖像對象的類型 {}".format(type(img)))
        print(img.shape)
        print("圖像寬度: {} pixels".format(img.shape[1]))
        print("圖像高度: {} pixels".format(img.shape[0]))
        # GRAYScale 沒有第三個維度哦, 所以這樣會報錯
        # print("通道: {}".format(img.shape[2]))
        print("圖像分辨率: {}".format(img.size))
        print("數據類型: {}".format(img.dtype))
    
    print_img_info(gray)
    

    這里是圖片信息

    圖像對象的類型 <class 'numpy.ndarray'>
    (182, 277)
    圖像寬度: 277 pixels
    圖像高度: 182 pixels
    圖像分辨率: 50414
    數據類型: uint8
    

    可以看到, 不同與彩色圖, grascale沒有第三個維度, 是一個扁平的二維矩陣。 我們選擇灰度圖的部分, 打印出來看一下。

    print("打印圖片局部")
    print(gray[100:105, 100:105])
    

    roi圖片像素點格式如下。

    打印圖片局部
    [[221 221 221 221 219]
     [220 220 220 220 219]
     [219 219 219 219 218]
     [219 219 219 219 218]
     [214 215 215 216 216]]
    

    給matplotlib添加cmap顯示灰度圖

    為什么我們給matplotlib傳入一個矩陣,matplotlib卻傻傻的分不清顏色, 不能轉變為我們想要的灰度圖呢?

    原因在于, 我們需要給matplotlib給定一個顏色映射函數。也就是從數值轉變為顏色的映射。

    我們稱之為color map , 在matplotlib里面簡稱為cmap.

    所有的顏色閾值, 可以在matplotlib的文檔里看到:color example code: colormaps_reference.py

    顏色地圖

    我們這里需要用到其中一個均衡組里面的gray 顏色映射。

    其中最黑代表0, 最亮代表255

    阿凱喜歡在教程里堆很多圖片, 可以幫助大家理解。

    灰度圖顏色映射

    關鍵語句

    # 需要添加colormap 顏色映射函數為gray
    plt.imshow(gray, cmap="gray")
    

    完整版本的程序

    ImageDisplayByMatplotlib_Grayscale.py

    # -*- coding: utf-8 -*- 
    import numpy as np
    import cv2
    # 引入Python的可視化工具包 matplotlib
    from matplotlib import pyplot as plt
    
    def print_img_info(img):
        print("================打印一下圖像的屬性================")
        print("圖像對象的類型 {}".format(type(img)))
        print(img.shape)
        print("圖像寬度: {} pixels".format(img.shape[1]))
        print("圖像高度: {} pixels".format(img.shape[0]))
        # GRAYScale 沒有第三個維度哦, 所以這樣會報錯
        # print("通道: {}".format(img.shape[2]))
        print("圖像分辨率: {}".format(img.size))
        print("數據類型: {}".format(img.dtype))
    
    # 導入一張圖像 模式為彩色圖片
    img = cv2.imread('cat.jpg', cv2.IMREAD_COLOR)
    
    # 將色彩空間轉變為灰度圖并展示
    gray  = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 打印圖片信息
    # print_img_info(gray)
    
    # 打印圖片的局部
    # print("打印圖片局部")
    # print(gray[100:105, 100:105])
    
    # plt.imshow(gray)
    # 需要添加colormap 顏色映射函數為gray
    plt.imshow(gray, cmap="gray")
    
    # 隱藏坐標系
    plt.axis('off')
    # 展示圖片
    
    plt.show()
    # 你也可以保存圖片, 填入圖片路徑就好
    # plt.savefig("cat_gray_01.png")
    

    然后我們顯示一下效果。

    Screenshot_20171211_190317.png


    韩国精品无码一区二区三区,精品无码一区二区三区AV,欧洲丰满美熟女乱又伦AV,亚洲午夜久久久影院伊人