opencv,Image(PIL),skimage,matplotlib.image,matplotlib.pyplot读取图像的区别以及如何显示读取的图像

1.读入的格式
      opencv:默认读入BGR通道顺序的numpy.ndarray,需要交换到rgb通道顺序才能用plt显示,不然会因为通道顺序不一致出现色偏。类型unit8,0-255
opencv,Image(PIL),skimage,matplotlib.image,matplotlib.pyplot读取图像的区别以及如何显示读取的图像_第1张图片

OpenCV读取的图片从BGR转换为RGB

import cv2
import matplotlib.pyplot as plt
import numpy as np
ship_BGR = cv2.imread('ship.jpg',cv2.IMREAD_COLOR)  # 第二个参数可以不写,默认值就是以彩色图像方式读取
plt.imshow(ship_BGR)
plt.show()

#方法一
ship_RGB_1 = ship_BGR[:,:,::-1]  # BGR和RGB正好是顺逆序关系
plt.imshow(ship_RGB_1)
plt.show()

#方法二
ship_RGB_2 = cv2.cvtColor(ship_BGR, cv2.COLOR_BGR2RGB)
plt.imshow(ship_RGB_2)
plt.show()

opencv,Image(PIL),skimage,matplotlib.image,matplotlib.pyplot读取图像的区别以及如何显示读取的图像_第2张图片

      Image(PIL):默认读入的是PIL格式,默认读入通道顺序RGB,需要转换到numpy格式,转换后的数组为unit8,0-255

img_PIL = np.array(img_PIL)

      skimage:基于scipy的图像处理包,默认读入通道顺序RGB,读取的格式也是numpy.ndarray格式,类型unit8,0-255
      matplotlib.image:读取的格式也是numpy.ndarray格式,类型unit8,0-255
      matplotlib.pyplot:默认读入RGB格式,读取格式也是numpy.ndarray格式,类型unit8,0-255

PS:
一张图片的像素值范围是[0,255], 所以默认类型是unit8.
一张彩色图片转换为灰度图后,它的类型就由unit8变成了float函数,float类型的范围是[-1,1]或[0,1]之间
opencv,Image(PIL),skimage,matplotlib.image,matplotlib.pyplot读取图像的区别以及如何显示读取的图像_第3张图片
2.显示读取的图像
使用matplotlib 包可以打印出来读取的照片,要打印上述案例中读取的照片,只需要下面两行代码就行了。

plt.imshow(img_plt , cmap=plt.cm.binary)
plt.show()

如果指向查看一个通道则使用以下代码

plt.imshow(img_plt[:,:,1] , cmap=plt.cm.binary)
plt.show()

也可以随便构造一个数组显示出来

digit  =  [[135,26,33,12],[14,27,43,190],[120,124,134,205]]
plt.imshow(digit, cmap=plt.cm.binary)
plt.show()

你可能感兴趣的:(Python,pytorch,opencv,计算机视觉,python)