最近在研究深度學習視覺相關的東西,經常需要寫python代碼搭建深度學習模型。比如寫CNN模型相關代碼時,我們需要借助python圖像庫來讀取圖像并進行一系列的圖像處理工作。我最常用的圖像庫當然是opencv,很強大很好用,但是opencv也有一些坑,不注意的話也會搞出大麻煩。近期我也在看一些別人寫的代碼,因為個人習慣不一樣,他們在做深度學習時用于圖片讀取的圖像庫各不相同,從opencv到PIL再到skimage等等各種庫都有,有些庫讀進來的圖片存儲方式也不太一樣,如果不好好總結這些主流圖像讀寫庫特點的話,以后看代碼寫代碼都會遇坑無數。這篇文章就總結了以下主流Python圖像庫的一些基本使用方法和需要注意的地方:
1.opencv
2.PIL(pillow)
3.matplotlib.image
4.scipy.misc
5.skimage
opencv: cv2.imread
opencv作為我最常用的圖像處理庫,當然第一個介紹,并且介紹得比較全面。毋庸置疑,opencv是今天介紹得所有圖像庫中最全面也最強大的庫,如果我們只想掌握一個圖像庫,我覺得opencv庫肯定是最適合不過了。
圖片讀取操作
import cv2import numpy as np#讀入圖片:默認彩色圖,cv2.IMREAD_GRAYSCALE灰度圖,cv2.IMREAD_UNCHANGED包含alpha通道img = cv2.imread('1.jpg')cv2.imshow('src',img)print(img.shape) # (h,w,c)print(img.size) # 像素總數目print(img.dtype)print(img)cv2.waitKey()

值得注意的是,opencv讀進來的圖片已經是一個numpy矩陣了,彩色圖片維度是(高度,寬度,通道數)。數據類型是uint8。
#gray = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE) #灰度圖#cv2.imshow('gray',gray)#也可以這么寫,先讀入彩色圖,再轉灰度圖src = cv2.imread('1.jpg')gray = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)cv2.imshow('gray',gray)print(gray.shape)print(gray.size)print(gray)cv2.waitKey()

上面提到了兩種獲取灰度圖的方式,讀進來的灰度圖的矩陣格式是(高度,寬度)。
#注意,計算圖片路徑是錯的,Opencv也不會提醒你,但print img時得到的結果是Noneimg2 = cv2.imread('2.jpg')print(img2)
#如何解決“讀到的圖片不存在的問題”? #加入判斷語句,如果為空,做異常處理img2 = cv2.imread('2.jpg')if img2 == None: print('fail to load image!')
新聞熱點
疑難解答