PIL和cv2讀取讀片的區別

2021-10-05 15:23:22 字數 2200 閱讀 8335

在看深度學習**的時候,發現torch中自定義dataset時,有些採用pil讀取資料,有些採用cv2讀取資料,所以想看看二者的區別,以及如何等價代替。

型別對比:

cv2:np.ndarray型別的資料;

pil:pil.jpegimageplugin.jpegimagefile型別的資料;

image1 = cv2.imread(img_path)

image2 = image.

open

(img_path)

print

(type

(image1)

,type

(image2)

)# 輸出

# #

讀取資料維度:

cv2:第乙個維度是高度,第二個維度是寬度;

pil:第乙個維度是寬度,第二個維度是高度;

image1 = cv2.imread(img_path)

image2 = image.

open

(img_path)

print

(image1.shape, image2.size)

# 輸出:

# (480, 856, 3)

# (856, 480)

通道順序:

cv2:bgr

pil:rgb

start = time.time(

)for _ in

range

(500):

image1 = cv2.imread(img_path)

print

('total time: %.3f s'

%(time.time(

)-start)

)# total time: 3.533 s

start = time.time(

)for _ in

range

(500):

image2 = image.

open

(img_path)

print

('total time: %.3f s'

%(time.time(

)-start)

)# total time: 0.071 s

統一torch形式:

下面的方法對應的torch的img和img2形狀、元素值均相同,可以等價替換;

img = transforms.totensor(

)(cv2.cvtcolor(cv2.imread(img_path)

, cv2.color_bgr2rgb)

)img2 = transforms.totensor(

)(image.

open

(img_path)

.convert(

'rgb'

))

start = time.time(

)for _ in

range

(500):

img = transforms.totensor(

)(cv2.cvtcolor(cv2.imread(img_path)

, cv2.color_bgr2rgb)

)print

('total time: %.3f s'

%(time.time(

)-start)

)# total time: 7.396 s

start = time.time(

)for _ in

range

(500):

img2 = transforms.totensor(

)(image.

open

(img_path)

.convert(

'rgb'))

print

('total time: %.3f s'

%(time.time(

)-start)

)# total time: 8.767 s

通過看transforms.totensor()**可以發現,pil型別的資料所進行的轉換操作要比np.array型別多,因此應該是在這部分占用了更多時間。(沒有具體研究對pil的哪乙個操作占用時間)

cv2 PIL區別筆記

使用 scipy.misc.imread 讀取的資料是 rgb 格式 使用 cv2.imread 讀取的資料是 bgr 格式 使用 pil.image.open 讀取的資料是rgb格式 對於單通道的 可以看出image讀取就是預設的單通道,但是cv2會預設轉化圍為3通道,並且數值也變了。需要加上cv...

安裝Opencv和匯入cv2

1.安裝包 安裝教程很多,最簡單的是使用pip命令 操作步驟 1 win r 開啟執行,輸入cmd進入命令列視窗 2 直接輸入pip install opencv python 2.安裝後匯入 安裝成功後,以為import cv2就萬事大吉了,結果提示modulenotfounderror 3.解決...

Linux下cv2的安裝

首先用anaconda是因為方便 管理方便,包安裝真心不方便 下面是我的安裝過程 1.首先使用如下命令安裝opencv conda install c opencv3 2.如果不可行,還是用下面這個吧 conda install channel opencv3 3.再不可行,就請試試這個 下面這段程...