python中cv2.imread()和Image.open()的區(qū)別和聯(lián)系詳解
1. cv2.imread()
cv2.imread()讀出的數(shù)據(jù)格式是numpy,默認(rèn)按照flag=1進(jìn)行讀取。
例:
import cv2
img = cv2.imread("img_path")
print(img.shape, type(img))
# 顯示圖像
cv2.imshow("demo", img)
# 窗口顯示時(shí)間,默認(rèn)0表示無限
cv2.waitKey()
# 按任意鍵銷毀窗口
cv2.destoryWindows("demo")
>>>輸出
(345,678,3) <class.'numpy.ndarray'>
1.1 cv2.imread參數(shù)說明
flags:讀取圖片的方式,可選項(xiàng)
- ① cv2.IMREAD_COLOR(1):默認(rèn)方式,3通道BGR彩色圖像
- ② cv2.IMREAD_GRAYSCALE(0):單通道灰度圖像
- ③ cv2.IMREAD_UNCHANGED(-1):原樣返回(使用Alpha通道)
- ④ cv2.IMREAD_ANYDEPTH(2):輸入具有相應(yīng)深度時(shí)返回16位/32位圖像,否則轉(zhuǎn)為8位
- ⑤ cv2.IMREAD_ANYCOLOR(4):以任何可能的顏色格式讀取
返回值:讀取的OpenCV圖像,nparray多維數(shù)組
1.2 注意事項(xiàng)
⑴ OpenCV中彩色圖像使用BGR格式,而PIL、PyQt、matplotlib等庫使用的是RGB格式。
import cv2 # 方法1:BGR 轉(zhuǎn) RGB img = img[:, :, ::-1] # 方法2:BGR 轉(zhuǎn) RGB img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
⑵ cv2.imread()如果無法從指定文件讀取圖像,并不會(huì)報(bào)錯(cuò),而是返回一個(gè)空矩陣。
⑶ 在python3中不支持圖片的路徑和文件名為中文或者有空格,當(dāng)必須使用中文可以用cv2.imdecode()處理。
例:
import cv2 imgFile = './images/測試.jpg' # cv2.imread(imgFile) 讀取失敗但不會(huì)報(bào)錯(cuò) img = cv2.imdecode(np.fromfile(imgFile, dtype=np.uint8), -1)
⑷ 讀取圖像時(shí)默認(rèn)忽略透明通道,但可以使用CV_LOAD_IMAGE_UNCHANGED參數(shù)讀取透明通道。
2. Image.open()
Image.open()返回值是PIL類型格式,可以直接圖片展示,但不能直接讀取其中的像素點(diǎn)值。
例:
from PIL import Image
img = Image.open('./image9.jpg')
print(img, img.size)
img.show()
>>>輸出
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1920x1080 at 0x222AD1D4160> (1920, 1080)
3. cv2.imread()與Image.open()相互轉(zhuǎn)化
3.1 cv2.imread()轉(zhuǎn)成Image.open():Image.fromarray()
import cv2
from PIL import Image
img_cv2 = cv2.imread('img_path')
# 方法1
img_cv2 = img_cv2[:, :, ::-1]
# 方法2
img_cv2 = cv2.cvtColor(img_cv2, cv2.COLOR_BGR2RGB)
img_PIL = Image.fromarray(img_cv2)
3.2 Image.open()轉(zhuǎn)成cv2.imread():np.array()
例:
import cv2
from PIL import Image
import numpy as np
img_PIL = Image.open('img_path')
img_cv2 = np.array(img_PIL)
# 方法1
img_cv2 = img_cv2[:, :, ::-1]
# 方法2
img_cv2 = cv2.cvtColor(img_cv2, cv2.COLOR_RGB2BGR)
總結(jié):cv2.imread()讀出的數(shù)據(jù)格式是numpy,Image.open()返回值是PIL類型格式。
總結(jié)
到此這篇關(guān)于python中cv2.imread()和Image.open()的區(qū)別和聯(lián)系詳解的文章就介紹到這了,更多相關(guān)python cv2.imread()和Image.open()詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
穩(wěn)扎穩(wěn)打?qū)WPython之容器 可迭代對象 迭代器 生成器專題講解
在剛開始學(xué)Python的時(shí)候,是不是經(jīng)常會(huì)聽到大佬們在講容器、可迭代對象、迭代器、生成器、列表/集合/字典推導(dǎo)式等等眾多概念,其實(shí)這不是大佬們沒事就擱那扯專業(yè)術(shù)語來裝B,而是這些東西都得要明白的,光知道字符串、列表等基礎(chǔ)還是不夠的,尤其是在Python的數(shù)據(jù)結(jié)構(gòu)方面2021-10-10
TensorFlow實(shí)現(xiàn)創(chuàng)建分類器
這篇文章主要為大家詳細(xì)介紹了TensorFlow實(shí)現(xiàn)創(chuàng)建分類器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
使用Python Flask實(shí)現(xiàn)簡易文件上傳功能
在平時(shí)工作中,文件上傳是一項(xiàng)常見的需求,例如將應(yīng)用異常時(shí)通過腳本生成的dump文件收集起來進(jìn)行分析,但實(shí)現(xiàn)起來卻可能相當(dāng)復(fù)雜,在本文中,我們將探討如何使用Flask實(shí)現(xiàn)文件上傳功能,編寫Dockerfile將應(yīng)用程序通過docker部署,需要的朋友可以參考下2024-05-05
python爬蟲爬取筆趣網(wǎng)小說網(wǎng)站過程圖解
這篇文章主要介紹了python爬蟲爬取筆趣網(wǎng)小說網(wǎng)站過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Python中的time模塊與datetime模塊用法總結(jié)
Python中內(nèi)置的各項(xiàng)時(shí)間日期函數(shù)幾乎都來自于time和datetime這兩個(gè)模塊,下面整理了Python中的time模塊與datetime模塊用法總結(jié),需要的朋友可以參考下2016-06-06
Python configparser模塊封裝及構(gòu)造配置文件
這篇文章主要介紹了Python configparser模塊封裝及構(gòu)造配置文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
基于Pytorch深度學(xué)習(xí)的衛(wèi)星圖像分類(Kaggle比賽項(xiàng)目實(shí)戰(zhàn))
本文介紹了在PyTorch框架下實(shí)現(xiàn)Kaggle衛(wèi)星圖像分類任務(wù)的完整流程,使用ResNet34模型對云層、沙漠、綠洲和水域四類衛(wèi)星圖像進(jìn)行分類,準(zhǔn)確率達(dá)96.53%,詳細(xì)說明了數(shù)據(jù)預(yù)處理(包括圖像增強(qiáng)技術(shù))、模型構(gòu)建與訓(xùn)練過程(20個(gè)epoch),并提供了測試腳本和可視化結(jié)果2025-10-10

