Python中的imread()函數(shù)用法說(shuō)明
# -*- coding: UTF-8 -*-import cv2'''cv2模塊--圖片的讀入和顯示''' image_path='D:/PycharmProjects/imageCut/cutted_images/0.jpg' img=cv2.imread(image_path)# np.ndarray BGR uint8cv2.imshow('test_imread',img)# 轉(zhuǎn)為RGB顯示cv2.waitKey()PIL方式:
# -*-coding: UTF-8 -*- from PIL import Imageimport numpy as npimport matplotlib.pyplot as plt image_path='D:/PycharmProjects/imageCut/cutted_images/0.jpg' #PIL#相關(guān):scipy.misc.imread, scipy.ndimage.imread#misc.imread 提供可選參數(shù)mode,但本質(zhì)上是調(diào)用PIL,具體的模式可以去看srccode或者document#https://github.com/scipy/scipy/blob/v0.17.1/scipy/misc/pilutil.pyimg=Image.open(image_path)img=np.array(img)# 獲得numpy對(duì)象, np.ndarray, RGB #統(tǒng)一使用plt進(jìn)行顯示,不管是plt還是cv2.imshow,在python中只認(rèn)numpy.array,但是由于cv2.imread 的圖片是BGR,cv2.imshow 時(shí)相應(yīng)的換通道顯示 plt.imshow(img)plt.show()matplotlib.image:
# -*-coding: UTF-8 -*- from PIL import Imageimport numpy as npimport matplotlib.pyplot as pltimport matplotlib.image as mpimg image_path='D:/PycharmProjects/imageCut/cutted_images/0.jpg' img=mpimg.imread(image_path) #統(tǒng)一使用plt進(jìn)行顯示,不管是plt還是cv2.imshow,在python中只認(rèn)numpy.array,但是由于cv2.imread 的圖片是BGR,cv2.imshow 時(shí)相應(yīng)的換通道顯示 plt.imshow(img)plt.show()skimage.io方式:
# -*-coding: UTF-8 -*- from PIL import Imageimport numpy as npimport matplotlib.pyplot as pltfrom skimage import io image_path='D:/PycharmProjects/imageCut/cutted_images/0.jpg' #4 skimge#caffe.io.load_iamge()也是調(diào)用的skimage實(shí)現(xiàn)的,返回的是0-1 float型數(shù)據(jù)img = io.imread(image_path) #統(tǒng)一使用plt進(jìn)行顯示,不管是plt還是cv2.imshow,在python中只認(rèn)numpy.array,但是由于cv2.imread 的圖片是BGR,cv2.imshow 時(shí)相應(yīng)的換通道顯示 plt.imshow(img)plt.show()scipy.misc方式:
# -*-coding: UTF-8 -*- from scipy.misc import imread, imshow, imsaveimport matplotlib.pyplot as plt image_path='D:/PycharmProjects/imageCut/cutted_images/0.jpg' img = imread(image_path)# imshow(img) need to set the SCIPY_PIL_IMAGE_VIEWER environment variable to point to the program/executable that can be used to view images on your system plt.imshow(img)plt.show()imsave('D:/PycharmProjects/imageCut/cutted_images/1.jpg',img)
補(bǔ)充:cv2.imread()和matplotlib.image.imread()讀取圖片的一些區(qū)別,python,中文路徑
1.cv2.imread()和matplotlib.image.imread()除了讀取出來(lái)的rgb的順序不一樣,對(duì)于讀取圖片的類型要求也不一樣,
example:將.jpg改為.png,后者讀取就有問(wèn)題,而前者就順利的讀取出來(lái)了
而且cv2.imread()不能有中文路徑,否則讀取不出來(lái),一般opencv庫(kù)都不允許中文路徑
但是可以這樣修改,就可以得到可以識(shí)別中文路徑的讀取:
#cv2識(shí)別中文路徑def cv2_imread(img_path): cv_img=cv2.imdecode(np.fromfile(img_path, dtype=np.uint8), -1) return cv_imgimg_y = cv2_imread(’E:/哈哈/’ + str(number) + ’.jpg’)#這個(gè)是存儲(chǔ)到帶有中文路徑的文件里面,其中有圖像質(zhì)量的模糊度cv2.imencode(’.jpg’, img,[int(cv2.IMWRITE_JPEG_QUALITY), random.uniform(30, 50)])[1].tofile('E:/哈哈/' + str(xuhao) + '.jpg')
對(duì)于cv2讀取的圖像的形式是數(shù)組,不同的讀取函數(shù),讀取到的圖像的形式是不一樣的,所以可以多次進(jìn)行不同的讀取方式,來(lái)進(jìn)行不同的操作
2.scipy.misc.imread()讀出來(lái)的為rgb,而且可以使用中文路徑(cv2.imread()讀出來(lái)的圖片是BGR)
scipy.misc.imsave(),直接進(jìn)行保存就可以。但是有一點(diǎn)要注意,它只能保存uint8類型的數(shù)據(jù),所以有時(shí)候就需要對(duì)他的類型進(jìn)行聲明。還有一些別的函數(shù),有時(shí)候也會(huì)這樣的。uint8的取值范圍是0-255,所以注意越界問(wèn)題。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章:
1. 詳解Android studio 動(dòng)態(tài)fragment的用法2. 解決Android studio xml界面無(wú)法預(yù)覽問(wèn)題3. 圖文詳解vue中proto文件的函數(shù)調(diào)用4. Spring Boot和Thymeleaf整合結(jié)合JPA實(shí)現(xiàn)分頁(yè)效果(實(shí)例代碼)5. php模擬實(shí)現(xiàn)斗地主發(fā)牌6. 什么是python的自省7. Vue封裝一個(gè)TodoList的案例與瀏覽器本地緩存的應(yīng)用實(shí)現(xiàn)8. vue 使用localstorage實(shí)現(xiàn)面包屑的操作9. .Net Core使用Coravel實(shí)現(xiàn)任務(wù)調(diào)度的完整步驟10. Vuex localStorage的具體使用

網(wǎng)公網(wǎng)安備