OpenCV —— 图片读取、显示、保存

 

1.读取

1.1.OpenCV方式

导入需要的包:
import numpy as np
import cv2
from matplotlib import pyplot as plt
%matplotlib inline  #使得matplotlib的图片显示功能能够在jupyter notebook上使用
读取图片,默认是color方式:
img1 = cv2.imread('Lena.jpg')
np.array格式、BGR格式、数据类型为uint8。
 

1.2.PIL方式

from PIL import Image
img2 = Image.open('Lena.jpg')
非np.array格式(需要转换)、RGB格式(注意OpenCv的为BGR格式)、数据类型为uint8。
 

2.显示

2.1.OpenCv方式读+OpenCv方式显示

因OpenCV的读取和显示都是BGR格式,故直接操作。
img1 = cv2.imread('Lena.jpg')
cv2.imshow('image',img1) #参数1:窗口名字,参数2:图片
cv2.waitKey(0) #等待时间,按了就提前结束,参数为0则无限等来,类似于阻塞线程
cv2.destroyAllWindows()# 关闭创建的所有窗口
 

2.2. OpenCv方式读+matplotlib方式显示

OpenCv的读取和显示的图片格式都是BGR,而matplotlib则是RGB格式。因此,如果用matplotlib显示OpenCv读取的图片,需要对图片的通道做一下调整。使用到两个函数:cv2.split()和cv2.merge()。
# 在用plt.imshow和cv2.imshow显示同一幅图时可能会出现颜色差别很大的现象。
# 这是因为:opencv的接口使用BGR,而matplotlib.pyplot 则是RGB模式
img1 = cv2.imread('Lena.jpg')
b,g,r = cv2.split(img1)   # 分割通道
img2 = cv2.merge([r,g,b])  # 合并通道
plt.imshow(img2)
plt.show()
 

2.3. PIL方式读+方式+matplotlib方式显示

因为PIL和matplotlib的图片格式都为RGB,所以是对应的,可以直接操作。
img2 = Image.open('Lena.jpg')
img2 = np.array(img2
plt.imshow(img2)
plt.show()
 

2.4.小结

    (1)OpenCV格式是BGR,PIL和matplotlib的格式是RGB。
    (2)OpenCV读取到的是np.array,而PIL读取到的非np.array,所以需要转换。
    (3)OpenCV显示在新建窗口,matplotlib显示在notebook上。
    (4)个人倾向于PIL读+matplotlib显示
 
 

3.保存图片

cv2.imwrite('Lena_written.jpg',img1)
返回结果表示是否写入成功。似乎写入图片的大小(占磁盘空间)和原图片的大小不同,而且jpg格式和png格式大小都不同,但矩阵的格式是不变的。
 
 

4.resize图片

img2 = Image.open('Lena.jpg')
img2 = np.array(img2)
img2 = cv2.resize(img2,(600, 400)) # resize,参数1:图片,参数2:(宽,高)
plt.imshow(img2)
plt.show()
 
 
 

5.使用matplitlib显示多张图片

主要使用subplot()、imshow()、show()三个函数
img1 = Image.open('1.jpg')
img2 = Image.open('2.jpg')

# 新建一张图片
# figsize为图片的大小,英寸为单位;dpi为一英寸的分别率,即一英寸有多少个像素
# facecolor背景颜色
plt.figure(figsize=(8,4),dpi=80,facecolor="pink")

plt.subplot(221) # 将整张图划分成2行*2列的格子,放在第一个格子
plt.imshow(img1) # 需要显示该格子
plt.title('Image 1') # 为该格子上标题

plt.subplot(224)# 将整张图划分成2行*2列的格子,放在第一个格子
plt.imshow(img2)
plt.title('Image 2')
plt.xticks([]), plt.yticks([]) # 去掉坐标轴

plt.show() #最后显示整张图片

 

 

posted on 2020-06-12 17:48  ZhicongHou  阅读(569)  评论(0编辑  收藏  举报

导航