詳解Python Opencv和PIL讀取圖像文件的差別
前言
之前在進(jìn)行深度學(xué)習(xí)訓(xùn)練的時(shí)候,偶然發(fā)現(xiàn)使用PIL讀取圖片訓(xùn)練的效果要比使用python-opencv讀取出來(lái)訓(xùn)練的效果稍好一些,也就是訓(xùn)練更容易收斂??赡艿脑蚴莾烧咦x取出來(lái)的數(shù)據(jù)轉(zhuǎn)化為pytorch中Tensor變量稍有不同,這里進(jìn)行測(cè)試。
之后的代碼都導(dǎo)入了:
from PIL import Image import matplotlib.pyplot as plt import numpy as np import torch import cv2
測(cè)試
使用PIL和cv2讀取圖片時(shí)會(huì)有細(xì)微的區(qū)別,通過(guò)下面的代碼可以發(fā)現(xiàn)兩者讀取圖片是有區(qū)別的,也就是使用PIL讀取出來(lái)的圖片轉(zhuǎn)為numpy格式和直接使用cv讀取的圖片在像素點(diǎn)上并不是完全一致:
In[11]: image = cv2.imread('datasets/0_target.jpg')
In[18]: image_pil = Image.open('datasets/0_target.jpg').convert('RGB')
In[19]: image_pil = np.array(image_pil)
In[20]: image_cv = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
In[21]: image_cv == image_pil
Out[21]:
array([[[ True, True, False],
[ True, False, False],
[False, False, False],
...,
[ True, True, True],
[ True, True, True],
[ True, True, True]],
[[ True, True, False],
[ True, True, True],
[False, True, False],
...,
[ True, True, False],
[ True, True, True],
[ True, True, True]],
[[ True, True, False],
[ True, True, True],
[False, False, False],
...,
[ True, True, True],
[ True, True, True],
[ True, True, False]],
...,
[[ True, True, True],
[ True, True, True],
[ True, True, True],
...,
[False, False, True],
[ True, True, True],
[False, False, False]],
[[ True, True, True],
[ True, True, True],
[ True, True, True],
...,
[ True, True, True],
[ True, True, True],
[False, False, False]],
[[ True, False, False],
[ True, False, False],
[ True, False, False],
...,
[ True, True, True],
[False, False, False],
[ True, False, False]]])
In[26]: image_cv.shape
Out[26]: (682, 700, 3)
In[27]: image_pil.shape
Out[27]: (682, 700, 3)
In[28]: image_pil - image_cv
Out[28]:
array([[[ 0, 0, 1],
[ 0, 255, 3],
[255, 1, 2],
...,
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]],
[[ 0, 0, 2],
[ 0, 0, 0],
[255, 0, 2],
...,
[ 0, 0, 254],
[ 0, 0, 0],
[ 0, 0, 0]],
[[ 0, 0, 2],
[ 0, 0, 0],
[255, 1, 2],
...,
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 254]],
...,
[[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
...,
[254, 1, 0],
[ 0, 0, 0],
[ 1, 255, 3]],
[[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
...,
[ 0, 0, 0],
[ 0, 0, 0],
[ 2, 254, 4]],
[[ 0, 1, 253],
[ 0, 1, 253],
[ 0, 1, 255],
...,
[ 0, 0, 0],
[ 1, 254, 1],
[ 0, 255, 2]]], dtype=uint8)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)Sqlite將字段當(dāng)做索引進(jìn)行查詢(xún)的方法
這篇文章主要介紹了Python實(shí)現(xiàn)Sqlite將字段當(dāng)做索引進(jìn)行查詢(xún)的方法,涉及Python針對(duì)sqlite數(shù)據(jù)庫(kù)索引操作的相關(guān)技巧,需要的朋友可以參考下2016-07-07
python 實(shí)現(xiàn)簡(jiǎn)易的記事本
這篇文章主要介紹了python 實(shí)現(xiàn)簡(jiǎn)易的記事本的示例代碼,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-11-11
Python數(shù)據(jù)類(lèi)型之列表和元組的方法實(shí)例詳解
這篇文章主要介紹了Python數(shù)據(jù)類(lèi)型之列表和元組的相關(guān)知識(shí),列表是一組有序項(xiàng)目的集合 ,可變的數(shù)據(jù)類(lèi)型可 進(jìn)行增刪改查,本文通過(guò)實(shí)例文字相結(jié)合的形式給大家介紹的非常詳細(xì) ,需要的朋友可以參考下2019-07-07
Python面試不修改數(shù)組找出重復(fù)的數(shù)字
這篇文章主要為大家介紹了不修改數(shù)組找出重復(fù)的數(shù)字Python實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Django 多語(yǔ)言教程的實(shí)現(xiàn)(i18n)
這篇文章主要介紹了Django 多語(yǔ)言教程的實(shí)現(xiàn)(i18n),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

