cv2方式:
# -*- coding: UTF-8 -*-
import cv2
"""
cv2模塊--圖片的讀入和顯示
"""
image_path="D:/PycharmProjects/imageCut/cutted_images/0.jpg"
img=cv2.imread(image_path)# np.ndarray BGR uint8
cv2.imshow("test_imread",img)# 轉為RGB顯示
cv2.waitKey()
PIL方式:
# -*-coding: UTF-8 -*-
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
image_path="D:/PycharmProjects/imageCut/cutted_images/0.jpg"
#PIL
#相關:scipy.misc.imread, scipy.ndimage.imread
#misc.imread 提供可選參數mode,但本質上是調用PIL,具體的模式可以去看srccode或者document
#https://github.com/scipy/scipy/blob/v0.17.1/scipy/misc/pilutil.py
img=Image.open(image_path)
img=np.array(img)# 獲得numpy對象, np.ndarray, RGB
#統一使用plt進行顯示,不管是plt還是cv2.imshow,在python中只認numpy.array,但是由于cv2.imread 的圖片是BGR,cv2.imshow 時相應的換通道顯示
plt.imshow(img)
plt.show()
matplotlib.image:
# -*-coding: UTF-8 -*-
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
image_path="D:/PycharmProjects/imageCut/cutted_images/0.jpg"
img=mpimg.imread(image_path)
#統一使用plt進行顯示,不管是plt還是cv2.imshow,在python中只認numpy.array,但是由于cv2.imread 的圖片是BGR,cv2.imshow 時相應的換通道顯示
plt.imshow(img)
plt.show()
skimage.io方式:
# -*-coding: UTF-8 -*-
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from skimage import io
image_path="D:/PycharmProjects/imageCut/cutted_images/0.jpg"
#4 skimge
#caffe.io.load_iamge()也是調用的skimage實現的,返回的是0-1 float型數據
img = io.imread(image_path)
#統一使用plt進行顯示,不管是plt還是cv2.imshow,在python中只認numpy.array,但是由于cv2.imread 的圖片是BGR,cv2.imshow 時相應的換通道顯示
plt.imshow(img)
plt.show()
scipy.misc方式:
# -*-coding: UTF-8 -*-
from scipy.misc import imread, imshow, imsave
import 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)
補充:cv2.imread()和matplotlib.image.imread()讀取圖片的一些區別,python,中文路徑
1.cv2.imread()和matplotlib.image.imread()
除了讀取出來的rgb的順序不一樣,對于讀取圖片的類型要求也不一樣,
example:
將.jpg改為.png,后者讀取就有問題,而前者就順利的讀取出來了
而且cv2.imread()不能有中文路徑,否則讀取不出來,一般opencv庫都不允許中文路徑
但是可以這樣修改,就可以得到可以識別中文路徑的讀取:
#cv2識別中文路徑
def cv2_imread(img_path):
cv_img=cv2.imdecode(np.fromfile(img_path, dtype=np.uint8), -1)
return cv_img
img_y = cv2_imread('E:/哈哈/' + str(number) + '.jpg')
#這個是存儲到帶有中文路徑的文件里面,其中有圖像質量的模糊度
cv2.imencode('.jpg', img,[int(cv2.IMWRITE_JPEG_QUALITY),
random.uniform(30, 50)])[1].tofile("E:/哈哈/"
+ str(xuhao) + ".jpg")
對于cv2讀取的圖像的形式是數組,不同的讀取函數,讀取到的圖像的形式是不一樣的,所以可以多次進行不同的讀取方式,來進行不同的操作
2.scipy.misc.imread()
讀出來的為rgb,而且可以使用中文路徑(cv2.imread()讀出來的圖片是BGR)
scipy.misc.imsave(),直接進行保存就可以。但是有一點要注意,它只能保存uint8類型的數據,所以有時候就需要對他的類型進行聲明。還有一些別的函數,有時候也會這樣的。uint8的取值范圍是0-255,所以注意越界問題。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()的區別
- 解決python cv2.imread 讀取中文路徑的圖片返回為None的問題
- Python imread、newaxis用法詳解
- 解決python測試opencv時imread導致的錯誤問題
- 解決Python下imread,imwrite不支持中文的問題
- python imread函數詳解