python 图片读取和显示的不同方法比较(一) cv2 matplotlib tensorflow PIL

目录

    • cv2
    • matplotlib
    • Tensorflow
    • PIL
    • 彩色图三通道顺序
    • 小结

随便找一张图

img_path=r'.keras\datasets\flower_photos\daisy\5673551_01d1ea993e_n.jpg'

cv2

import cv2

img = cv2.imread(img_path)
# 灰度图
#img = cv2.imread(img_path, 0)
print(type(img))
print(img.shape)

cv2.imshow('imgname', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


(212, 320, 3)

numpy数组形式,显示通过window的窗口

matplotlib

import matplotlib.pyplot as plt

img = plt.imread(img_path)
print(img.shape)
plt.imshow(img)
plt.show()


(212, 320, 3)

numpy数组形式,在IDE的terminal中显示

Tensorflow

import tensorflow as tf
import matplotlib.pyplot as plt

img = tf.io.read_file(img_path)
img = tf.image.decode_jpeg(img, channels=3)
print(type(img))
print(img.shape)
plt.imshow(img)
plt.show()

是tensorflow的tensor格式但基本操作和numpy数组一致


(212, 320, 3)

PIL

from PIL import Image
import numpy as np

img = Image.open(img_path)
print(type(img))
print(np.array(img).shape)
img.show()


(212, 320, 3)

读入是PIL对象,需要使用np.array()转换。显示通过window的窗口

读取速度对比:
图片读取速度对比参考,试验结果在得到numpy array的情况下CV2最快(单核100/s),直接用PIL的Image.open(img_path)打开速度会更快(6000/s)

彩色图三通道顺序

如果使用cv2,但是使用其他方法显示和处理图像时就会出现问题,比如:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread(img_path)
plt.imshow(img)
plt.show()

python 图片读取和显示的不同方法比较(一) cv2 matplotlib tensorflow PIL_第1张图片
因为除cv2是BGR以外,其余方法读取的彩色图通道都RGB,因此需要使用以下API对通道进行调整,才能显示出正确的图像python 图片读取和显示的不同方法比较(一) cv2 matplotlib tensorflow PIL_第2张图片

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

小结

原图的尺寸为宽320,高212。所有方法读取图像的格式一致**(height, width, channels)**, 即先行后列。
python 图片读取和显示的不同方法比较(一) cv2 matplotlib tensorflow PIL_第3张图片

你可能感兴趣的:(Python,python,opencv,numpy,图像识别)