Python Numpy 和 CV 應用

1. 檢視圖片轉為矩陣後的維度和型別:

if __name__ == "__main__":
    import numpy as np
    from PIL import Image
    from matplotlib import pyplot as plt
    
    img = np.array(Image.open("TT.jpg"))

    # display the dimension and data type
    print (img.shape, img.dtype)
    plt.imshow(img)
    plt.show()

顯示結果如下(其結果應對應你的圖片大小而有所不同):

(1810, 2715, 3) uint8

矩陣維度是 1810 * 2715 * 3 (三通道),每個元素為 uint8 (0~ 255)


2. 圖片轉為單通道(灰階):

if __name__ == "__main__":
    import numpy as np
    from PIL import Image
    from matplotlib import pyplot as plt
    
    img = np.array(Image.open("TT.jpg").convert("L"), "f")

    # display the dimension and data type
    print (img.shape, img.dtype)
    plt.imshow(img, cmap="gray")
    plt.show()

顯示結果如下(其結果應對應你的圖片大小而有所不同):

(1810, 2715) float32

矩陣維度是 1810 * 2715 * 1 (單通道),每個元素為 float32


3. 矩陣間相互轉換:

if __name__ == "__main__":
    import numpy as np
    from PIL import Image
    from matplotlib import pyplot as plt
    
    img = np.array(Image.open("TT.jpg").convert("L"), "f")
    
    # display the dimension and data type
    print (img.shape, img.dtype)
    img = np.uint8(img)
    print (img.shape, img.dtype)

顯示結果如下(其結果應對應你的圖片大小而有所不同):

(1810, 2715) float32
(1810, 2715) uint8

4. 從矩陣中切片:

if __name__ == "__main__":
    import numpy as np
    from PIL import Image
    from matplotlib import pyplot as plt
    
    img = np.array(Image.open("TT.jpg").convert("L"), "f")

    #
    plt.subplot(211)
    print (img.shape, img.dtype)
    plt.imshow(img, cmap="gray")
    
    #
    plt.subplot(212)
    img2 = img[50:200,50:200]
    plt.imshow(img2, cmap="gray")
    plt.show()





































5. 矩陣元素統一運算:

if __name__ == "__main__":
    import numpy as np
    from PIL import Image
    from matplotlib import pyplot as plt
    
    img = np.array(Image.open("TT.jpg").convert("L"))
    # just a demo
    img = (255 - img)/2 
    
    # display the dimension and data type
    print (img.shape, img.dtype)
    plt.imshow(img, cmap="gray")

反白再將亮度減半的結果如下:

!!! 假設原矩陣是整數型別,對其進行浮點數乘除會將整個矩陣元素轉型成浮點數。 !!!

留言

熱門文章