在看深度學習**的時候,發現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.再不可行,就請試試這個 下面這段程...