from PIL import Image
import numpy as np
import cv2
from matplotlib import pyplot as plt
file_path = '1.png'
讀彩色圖像
區(qū)別:文章來源地址http://www.zghlxwxcb.cn/news/detail-763939.html
- opencv-python讀出來的是BGR顏色通道的
- PIL讀出的是PIL類格式的,而cv和plt是numpy數(shù)組
# 讀取彩色圖像 都是H×W×C
img1 = cv2.imread(file_path) # BGR
img2 = plt.imread(file_path) # RGB
img3 = np.array(Image.open(file_path)) # RGB
BRG和RGB格式互轉
# 用opencv-python
image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB)
image_bgr = cv2.cvtColor(image_rgb, cv2.COLOR_RGB2BGR)
# 利用數(shù)組切片
# 因為shape是H×W×C,BGR倒著讀就是RGB
image_rgb = image_bgr[:, :, ::-1]
讀灰色圖像
區(qū)別:
- plt沒法讀取時設置讀灰色圖像,但是可以在plt.imshow()的時候設置按照灰度圖顯示
# 以灰度圖方式讀取
img4 = cv2.imread(file_path, flags=cv.IMREAD_GRAYSCALE)
img6 = np.array(Image.open(file_path).convert("L"))
# img5 = plt.imread(file_path)
# plt沒法以灰度方式讀取,只能在imshow的時候以灰度方式顯示plt.imshow(a, cmap='viridis', interpolation='nearest')
opencv的flags參數(shù)
常數(shù) | 值 | 效果 |
---|---|---|
cv2.IMREAD_COLOR | 1 | 讀取圖像時保留顏色通道(默認值) |
cv2.IMREAD_GRAYSCALE | 0 | 以灰度模式讀取圖像 |
cv2.IMREAD_UNCHANGED | -1 | 以包含 alpha 通道的方式讀取圖像 |
保存圖像
matplotlib:
plt保存原理是先創(chuàng)建畫板,然后把圖像繪制上去。
這會導致保存圖像出現(xiàn)白邊,以及像素大小與想要的大小不符的現(xiàn)象。不推薦使用?。?/strong>
plt.imshow(image)
plt.savefig('output.png', bbox_inches='tight', transparent=True, dpi=300, figsize=(6, 4))
opencv:
簡單好用
cv2.imwrite("output.jpg", img) # img是numpy數(shù)組
pillow:
必須先轉PIL對象才能保存
# 使用PIL保存NumPy數(shù)組為圖像
image = Image.fromarray(numpy_array)
# 保存圖像
image.save("output.png")
?文章來源:http://www.zghlxwxcb.cn/news/detail-763939.html
顯示圖像
區(qū)別:
- PIL調(diào)用系統(tǒng)默認的圖片查看工具
- opencv和matplotlib有自己的可視化工具,且matplotlib可以集成在Pycharm的SciView
# PIL
image = Image.open("image.jpg")
image.show()
# opencv
image = cv2.imread("image.jpg")
cv2.imshow("Image", image)
cv2.waitKey(0) # 修改等待時間可以用于展示視頻幀
cv2.destroyAllWindows()
# matplotlib
plt.imshow(img)
plt.show()
到了這里,關于pillow opencv matplotlib讀寫圖片有什么區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!